ruby

2011ǯ03��18��

��ٻ�ġ���֥��󥿡��ͥå��˲��פ�������ޤ���

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

��ٻ�ġ��� ���󥿡��ͥå��˲���������ޤ�����

������Ϥ��äȼ������ٻ�˻��Ѥ��Ƥ����ġ���Ǥ�������ǻ��Ѥ��Ƥ�����ΤʤΤǡ���������륢�ץ�����ε�ǽ�ʤɤ�¿���ɲä���Ƥ��ޤ������������󤽤�ʳ���Web���ץꥱ�������Ǥ���ѤǤ��ޤ���

����Ū�ˤ�Apache JMeter�Τ褦��Web���ץꥱ�������ऱ�Υ��ʥꥪ��ٻ�ġ���Ǥ������ޥ�ɥ饤�󥪥ڥ졼���������Ǽ¹ԤǤ��������С���Ǵ�ñ����ٻ��»ܤǤ���Τ���ħ�Ǥ���POST�ꥯ�����ȤʤɤϤ�����󡢥쥹�ݥ󥹤Υ����å���UserAgent�ε�������������ͤ�ѥ�᡼�����˥��åȤ��뵡ǽ��������Ƥ��ޤ���

����: �����ʤ��鼫ʬ�δ������ˤʤ������Ȥ˸�������ٻ�ġ����¹Ԥ���Τ����Фˤ��Ƥ������������˴����Ǥ���

ʪ����̾�����Ĥ��Ƥ��ޤ���������ϴ����ˤ錄���ξ���Ū�����μ�̣�ˤ��Ȥ����Ǥ����Ͽ̤ǿ͡����줷��Ǥ���Ȥ����ˡ��˲��פȤ���̾����ɤ��ʤΤ��ȻפäƤ����ΤǤ�����̾���Ϥ����ޤǤ�̾���ˤ����������֤���ٻ�ġ���Ǥ��Τǡ��Ѥ˱�θ����ΤϤ��Ƹ������뤳�Ȥˤ��ޤ�����

�Ͽ̤κݡ����äʤɤ���ǽ���ʤ��ʤ�ʤ���Twitter�� Google��Person Finder�ʤɤ�Web���ץꥱ������󤬺ҳ����ξ���򴹤���Ω�ä��Τϼ��Τλ��¤Ǥ��������ƺҳ����ʤɤ˥����������������Ƥ⥵���ӥ���ʿ��˹Ԥʤ�����ˤϡ���ٻ��ɬ�פǤ����趯��Web���ץꥱ��������ȯ���뤿��ˡ����Υġ��뤬��Ω�ƤиĿ�Ū�ˤ����ˤ��줷���Ǥ���

���󥹥ȡ�����ˡ

rubygems����Ͽ����Ƥ��뤿�ᡢ�ʲ��Υ��ޥ�ɥ饤�����ǥ��󥹥ȡ���Ǥ��ޤ���RubyRev�Ȥ������٥�ȶ�ư�Υե졼��������Ѥ��Ƥ���Τǡ��������Ʊ���˥��󥹥ȡ��뤵��ޤ���

$ gem install internethakai

�����������ɤ�ܺ٤ʥɥ�����Ȥϰʲ��Υ����ȤˤޤȤ�Ƥ��ޤ���

http://internethakai.rubyforge.org/

���塼�ȥꥢ��

��ñ�ʻ��¹Ԥ��Ƥߤޤ��礦��

�ޤ����ʥꥪ�Υƥ�ץ졼�Ȥ��������ޤ���

$ hakaigen
your site
    ex. http://example.com
> example.com
save to scenario-0.yml

scenario-0.yml�Ȥ����ե�����˥١����Ȥʤ�����ե����뤬��¸����ޤ�����actions�Ȥ������ܤ򤤤���ޤ������ʥꥪ��yml�����Ǥ���

actions:
  -
    path: /top/index
  -
    path: /item/confirm
  -
    path: /item/doBuy
    method: POST
    post_params:
      id: 12
      category: 2

�ʾ�Τ褦��path��ʤ�٤ƽ񤤤Ƥ���������פǤ���POST�βս��method��POST�Ȼ��ꤷ���ѥ�᡼������Ĥ��ޤ���

�ʲ��Υ��ޥ�ɤǼ¹Ԥ��ޤ���--test���ץ�����Ĥ���ȡ�������٥�3��Ʊ���ꥯ�����ȿ�1�Ǽ¹Ԥ��ޤ���

$ internethakai scenario-0.yml --test

������٥��4�ˤ���ȡ��쥹�ݥ󥹤���Ȥޤdz�ǧ�Ǥ��ޤ���

$ internethakai scenario-0.yml --log=4

Ʊ���ꥯ�����ȿ���50�ޤ����䤷�ޤ���

$ internethakai scenario-0.yml -r 50

100��롼�פ����ޤ���

$ internethakai scenario-0.yml -r 50 -l 100

5ʬ��(300��)����³�����ޤ���

$ internethakai scenario-0.yml -r 50 -d 300

�˲��Ϥ򤢤��뤿�ᡢ4�ץ������Ǽ¹Ԥ��Ƥߤޤ���

$ internethakai scenario-0.yml -r300 -p4 -d300

�����Ʊ���ˡ���ٻ��¹Ԥ��ʤ��顢cacti��ganglia�ʤɤΥ�ݡ��ȥġ���ǥ����С��ξ��֤��ǧ���ޤ���

�ޤ��¹Ԥ���λ����ȡ����󥿡��ͥå��˲���¦�ˤ�ǡ�����ɽ�������Τǡ��쥹�ݥ󥹤˻��֤Τ�����ѥ��ʤɤ��ǧ�Ǥ��ޤ���

Target domain = http://example.com
Loop: 1
Request Concurrency: 10
Scenario Concurrency: 10
ooooooO
result: failure

TimePerRequest: 466.763428571429
RequestPerSec: 21.4241292009657


MinResponse Worst:
        1: /top/index 66.806 20
        2: /shop/confirm 26.582 10
        3: /shop/doBuy 26.072 10
AvgResponse Worst:
        1: /shop/doBuy 252.2343 20
        2: /top/index 39.0615 10
...

��Ǥϡ�POST�ꥯ�����ȤˤĤ��륢���ƥ��ID�ʤɤ����ˤ��ޤ��������ºݤλ�Ǥϥ������ID����ꤷ�������⤢��ޤ���

actions:
  ...
  -
    path: /item/doBuy
    method: POST
    post_params:
      id: 12 # ���������������ѹ���������
      category: 2

�ޤ�1����100�ޤǤ��ͤ�񤤤��ե�����(���Զ��ڤ�)���Ѱդ��ޤ���

$ ruby -e "1.upto(100){|i| puts i.to_s}" > ids

��������ѿ��Ȥ������Ѥ���褦������ե������񤭴����ޤ���

vars:
  -
    var_file: ./ids
    var_name: item_id

actions:
...
  -
    path: /item/doBuy
    method: POST
    post_params:
      id: %(item_id)% # ���������������ѹ���������
      category: 2

���ξ��֤Ǽ¹Ԥ���С�1��Υ��ʥꥪ���Ȥ˰ۤʤ��ͤ����Ѥ���ޤ���

$ internethakai scenario-0.yml -r50 -d300

(takada-at)

klab_gijutsu2 at 16:50���������URL��Comments(4)��TrackBack(0)
2010ǯ06��17��

����1000���ͥ��������Ѥ��롪 Ruby �Υ��٥�ȶ�ư�饤�֥�� Rev �� EventMachine �� HTTP���饤�����

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

����ˤ��ϡ�takada-at �Ǥ���
Ruby�Υ��٥�ȶ�ư���ͥåȥ���ץ�����ߥ󥰥ե졼���� Rev �� EventMachine �� HTTP���饤����Ȥ�ư�����Ƥߤޤ�����
���٥�ȶ�ư���ͥåȥ���ץ�����ߥ󥰥ե졼�����Ȥϲ����������������񤷤��Ǥ���������Ǹ����ȡ��ʲ��Τ褦�ˤʤ�ޤ���
# �դĤ��Υե�����ư���ץ������
Net::HTTP.start(host, port){|http|
    res = http.get(path) #���ν���������äƤ���
}
puts "done" #���μ��ν������¹Ԥ����
# ���٥�ȶ�ư���ץ������
client = Rev::HttpClient::connect(host, port)
client.get(path) #���ν���������äƤʤ��Τ�
puts "not done" #�������ιԤ��¹Ԥ���Ƥ��ޤ�
�츫����ȥץ�������ʣ����������������Τ褦�˻פ��ޤ�����������֥��å����ʤ��Ȥ������Ȥ�̵�̤��ʤ��Ȥ������ȤǤ⤢��ޤ�������ˤ�äơ�
  • ʣ���Υե�����ǥ�������ץ���Ʊ���˳���
  • �ɤ߹��߲�ǽ�ʤ�Τ���������Ƥ���
�ʤ�Ƥ��Ȥ�Ǥ���褦�ˤʤ�ޤ���I/O¿�Ų����Υ�֥��å���I/O �ȸƤФ����ˡ�Ǥ���


���٥�ȶ�ư�饤�֥��Υ���ץ�Ǥϡ������С���񤯤��Ȥ�¿���Ǥ��������饤����Ȥ�Ʊ����³���θ³���ĩ�路�����ä��Τǡ������ HTTP���饤����Ȥ�񤤤Ƥߤޤ���


Ruby �Υ��٥�ȶ�ư�饤�֥��Ȥ��� Ruby Rev�� EventMachine ��2�Ĥ�Ȥäƥ쥹�ݥ󥹥�������¬���ޤ������ɤ�����ȼ��� HTTP���饤����Ȥ�饤�֥����Ȥ߹���Ǥ��ޤ���

EventMachine
http://rubyeventmachine.com/

Rev
http://rubyforge.org/projects/rev/


Rev �� EventMachine �� Python �� Twisted �� Tornado��Perl �� AnyEvent �Τ褦�ˡ��Υ�֥��å��� I/O �����Ѥ��뤳�Ȥ��¹������⤯��®�ʥͥåȥ���ץ��������Ȥि��Υե졼�����Ǥ���


�ɤ���Υ饤�֥���ޤ����ޤ����������ޤ��󤬡������μ����򸫤Ĥĥ���ץ륳���ɤ�������Ƥߤޤ�����
������������ȡ�Rev�ϤȤƤ��®�Ǥ���


�����С�¦�Ǥ�ñ���100ms�ԤäƤ���쥹�ݥ󥹤��֤������Υڡ������Ѱդ��Ƥ��������饤����Ȥ��������³���ƥ쥹�ݥ󥹥������ʿ�Ѥ���ޤ������פ���ˡ�����������䤷�Ƥ�쥹�ݥ󥹥����ब100ms �˶ᤱ��жᤤ�ۤɡ���®�ʥ��饤����ȤȤ������Ȥˤʤ�ޤ���
�ʲ�
  • Ruby�Υ���å� + net/http �饤�֥��
  • Rev/HttpClient
  • EventMachine/HttpClient2
��3�ѥ�����ǻ�ޤ�����Ruby �� �С������ �� 1.8.7 �Ǥ���
�ʤ���������Ѥ��������С��ϡ�Python �� Tornado �ǽ񤫤�Ƥ��ꡢ��ʬ�˹�®�Ǥ���
(EventMachine �ˤϤʤ��� HTTP���饤����Ȥ�2�Ĥ���ޤ�����HttpClient �Ȥ���̾�������ϤޤȤ��ư��ʤ��ä��Τǻ�оݤ��鳰���ޤ���)��


10���ͥ������
target: http://hornet.klab.org:8000/
concurrency: 10
net/http + thread
        avg: 140.5132
EventMachine/HttpClient2
        avg: 101.3227
Rev/HttpClient
        avg: 101.4915

����åɤ����Ϥ��Ǥ�¿�����ٱ䤬�������Ƥޤ���


100���ͥ������
target: http://hornet.klab.org:8000/
concurrency: 100
net/http + thread
        avg: 166.59175
EventMachine/HttpClient2
        avg: 110.23086
Rev/HttpClient
        avg: 103.69137

EventMachine, Rev �Ϥۤ������̵���������֤Ǥ���


500���ͥ������
target: http://hornet.klab.org:8000/
concurrency: 500
net/http + thread
        avg: 2720.349032
EventMachine/HttpClient2
        avg: 132.847788
Rev/HttpClient
        avg: 113.132662

EventMachine ��¿�����ٱ䤬ȯ������褦�ˤʤ�ޤ���������åɤϤۤȤ�ɻȤ���Τˤʤ�ʤ��٤��Ǥ���


1000���ͥ������
target: http://hornet.klab.org:8000/
concurrency: 1000
net/http + thread
        avg: 10968.612545
EventMachine/HttpClient2
        avg: 136.243228
Rev/HttpClient
        avg: 122.174841


EventMachine �⤫�ʤ��®�Ǥ�����1000�򾯤��ۤ��������꤫��ޤȤ��ư��ʤ��ʤ�ޤ���
���� Rev ��1000���ͥ���������٤Ǥ�����ʤ�ư���褦�Ǥ���



�ʤ����ջ���Ȥ��ơ����λ�򤹤����ˡ��ե�����ǥ�������ץ������¤����䤷�Ƥ���ɬ�פ�����ޤ���
�ǥե���ȤǤ�1024�ʾ�Υե�����ǥ�������ץ��򰷤����Ȥ��Ǥ����������åȤο��ˤ����¤����廊���Ƥ��ޤ��ޤ���
Linux �Ǥϡ�/etc/security/limits.conf ���Խ����뤳�Ȥǥ桼�����Υե�����ǥ�������ץ��ξ�¤����䤹���Ȥ��Ǥ��ޤ���



����ˡ�TIME_WAIT ���֤Υ��ͥ�������Ȥ��󤻤�褦��tcp_tw_reuse=1 �����ꤷ�Ƥ����Ȥ褤�Ǥ��礦��
/etc/sysctl.conf �� net.ipv4.tcp_tw_reuse��=��1 �����ꤹ�뤳�Ȥǡ�TIME_OUT ���֤Υ��ͥ�����������Ѥ���TCP���ͥ������ξ�¤�����夲�뤳�Ȥ��Ǥ��ޤ���



�ʲ��˺�����Ѥ����ƥ��ȥ����ɤ�Ǻܤ��ޤ���
���٥�ȶ�ư���Ȥ��Ƥ뤿��¿���ɤߤˤ����Ǥ������ɤΥѥ������ 1���ԤäƤ���HTTP�ꥯ�����Ȥ���������������쥹�ݥ󥹤λ��֤��¬���Ƥ��ޤ���

(takada-at) ³�����ɤ�
klab_gijutsu2 at 21:53���������URL��Comments(2)��TrackBack(0)
Blog�⸡��
�ǿ�����
Archives
���Υ֥����ˤĤ���
DSAS�Ȥϡ�KLab �����ۤ����Ѥ��Ƥ��륳��ƥ�ĥ����ӥ��Ѥ�Linux�١����Υ���ե�Ǥ�������5����Υǡ������󥿤ˤƹ��ۤ������Ѥ��Ƥ��ޤ������桹��DSAS����Ȥ��䤹�����������ˡ������Ƥ����ϤDZ��ѤǤ��뤳�Ȥ��ܻؤ��ơ��������ɤ˶Ф���Ǥ��ޤ���
���Υ֥����Ǥϡ������ DSAS �ǻȤäƤ��뵻�ѤξҲ�䡢�¸����Ƥߤ���̤���𡢥ȥ�֥�˴������ޤ줿���ηи��̤ʤɡ���������������������򿥤�ޤ��ƾҲ𤷤Ƥ��������Ȼפ��ޤ���
�ǿ�������
<%==comments[n].author%>
<% } %>