Web�̕��׃e�X�g�Ɏg����t���[�\�t�g�E�F�A�FPrograming Bible�i1/2 �y�[�W�j

�C���^�[�l�b�g��ł́AWeb�A�v���P�[�V������T�[�o���̂��̂������ׂƂȂ邱�Ƃ͉”\�Ȍ���������K�v������B�{�e�ł́A���IWeb�T�C�g�̐��Ƃ�Web�̕��׃e�X�g�Ŏg����\�t�g�E�F�A����‚��Љ�Ă����B

» 2009�N01��15�� 01��30�� ���J
[Leslie P. Polzer�CITmedia]
SourceForge.JP Magazine

�@Web�A�v���P�[�V��������уT�[�o�̍����׎��̋������m�F������@��1�‚��A�^���I�ɕ��ׂ������ăe�X�g���s�����Ƃ��B�����ł́A���������e�X�g�����{����t���[�\�t�g�E�F�A����‚������A���ꂼ�ꂪ�ǂ�ȃ^�C�v�̃T�C�g�ɓK���Ă��邩�𒲂ׂ��B

�@���׃e�X�g�p�̃c�[���͂��낢�날�邪�A�����e�i���X���s���Ă��Ȃ����́A�t���[�łȂ����́A�C���X�g�[���菇�����m�łȂ����̂������ƁAcurl-loader�Ahttperf�ASiege�ATsung�AApache JMeter��5�‚����Ƃ��Ďc��B

�@JMeter�ɂ‚��ẮA���ł��_�j�G���E���[�r�I�������グ�Ă����̂ŁA�����ł͏ڂ����������Ȃ��B�������A�Ō�̂܂Ƃ߂łق��̃c�[���ƂƂ��ɊȒP�ɐG��Ă���B

curl-loader

�@curl-loader�́A�uSpirent��Avalanche��IXIA��IxLoad�̑�ւƂ��Ďg���鋭�͂��_��ȃI�[�v���\�[�X�̃e�X�g�\�����[�V�����̒񋟁v��ړI�Ƃ��Ă���B�����x�Ə_��̍���cURL���C�u�����𗘗p���āA�v����F�؁A�Z�b�V�����̏������s���B

�@curl-loader�̃r���h���@�͒P�������ŁA�p�b�P�[�W���_�E�����[�h���A�W�J���āA�W�J��̃f�B���N�g���ŃR�[�h��make���s���������B�����Aip_secondary.c�Ƃ����t�@�C���Ɂu#include �v�Ƃ����s��lj�����K�v���������B�����炭�A�ŋ߂�glibc�w�b�_�t�@�C���̕ύX���������낤�B�܂��Acurl-loader���R���p�C�����Ď��s����ɂ́AOpenSSL�̃��C�u�����ƃw�b�_�t�@�C���̃C���X�g�[�����K�v�ɂȂ�B

�@�e�X�g���n�߂�ɂ͐ݒ肪�K�v���Bcurl-loader�̐ݒ��2�J���ōs���B1�‚́A��̓I�ȃV�i���I�����߂�p�����[�^���L�q����ݒ�t�@�C���ł���B�����͊ȒP�ŁA�ϐ��ɒl��������uVAR=VALUE�v�Ƃ����`�̎���1�s���•��ׂ�B���ɕ�����₷���T���v�����A�\�[�X�c���[�́uconf-examples�v�f�B���N�g���Ɋ�‚��p�ӂ���Ă���B

�@curl-loader�ł́A������IP�A�h���X���g���āA�ʁX�̃N���C�A���g����v��������󋵂��Č��ł���B���̂��߁AINTERFACE�ACLIENTS_NUM_MAX�ANETMASK�AIP_ADDR_MIN�AIP_ADDR_MAX�̊e�l���e���̃l�b�g���[�N�‹��ɍ��킹�Ē�������K�v������B�����ڑ��”\�ȍő�N���C�A���g���́A�w�肷��IP�A�h���X�͈̔͂ɂ���Č��܂�B

�@����1�‚̐ݒ�̏�ƂȂ�̂��Acurl-loader�����s����R�}���h���C���C���^�t�F�[�X���B�K�{�ƂȂ�u-f�v�����ɂ́A�e�X�g�Ɏg���V�i���I�t�@�C���̏ꏊ���w�肷��B���̂ق��̈����́A���{����e�X�g�̔������ɗp����B�Ⴆ�΁Acurl-loader�̃f�t�H���g�ݒ�ł́A�v���̔��s���V���O���X���b�h�ōs����B�V�X�e�����\�[�X�̐ߖ�ƃp�t�H�[�}���X�̌���ɂ͈����Ȃ��ݒ肾���A�}���`�R�ACPU�̃}�V���ł���΁u-t�v�I�v�V�������g���āA���p����R�A���ɉ����ăX���b�h��lj�����Ƃ悢���낤�B

�@�e�X�g�̌��ʂ́A�T�}����񂪉�ʏ�Œ���I�ɍX�V�����ق��A�ڍׂȏ�񂪃��O�t�@�C���ɋL�^�����B�g���q���u.log�v�̃t�@�C���ɂ͔��������G���[�̏�񂪁A�u.ctx�v�t�@�C���ɂ̓N���C�A���g�ʂ̓��v��񂪁A�u.txt�v�t�@�C���ɂ͎��n��̓��v��񂪂��ꂼ�ꏑ�����܂��B

�@Python�ŏ����ꂽ�Acurl-loader�̗ގ��c�[���Ƃ���Pylot������B�������GUI������A�ݒ�t�@�C����XML�`���ɂȂ�B

httperf

�@httperf�́AHewlett-Packard Laboratories���J�������A�V���O���X���b�h�œ��삷��R�}���h���C���̕��׃e�X�g�c�[�����B

�@httperf�ł́A�ݒ�̂قƂ�ǂ��R�}���h���C�������ōs���B�ݒ�t�@�C���́A�Z�b�V�����̃V�i���I���L�q���邽�߂̕⏕�I�Ȗ�����S���B

�@�ȉ��́A�ڑ�����5,000�A�e�ڑ������s�����݂�v������50�Ƃ����ꍇ�̎��s��ł���B


httperf --server=localhost --uri=/ --num-conns=5000 --num-calls=50

�@�ŏ��̏o�͍s�ɂ́A�R�}���h���C���Ŏw�肳�ꂸ�Ƀf�t�H���g�l�����蓖�Ă�ꂽ�������܂߁A�R�}���h�̈����Q�����̂悤�Ȋ��S�Ȍ`�ŕ\�������B


httperf --client=0/1 --server=localhost --port=80 --uri=/ \
  --send-buffer=4096 --recv-buffer=16384 \
  --num-conns=5000 --num-calls=50

�@curl-loader�ƈ���āAhttperf�͎��{���Ă���e�X�g�̌o�ߕ\���̍X�V���A�ڍׂȃ��O�̋L�^���s��Ȃ��B�e�X�g�I�����Ɍ��ʂ̃T�}�����\������邾���ł���B�f�o�b�O�p�̃X�C�b�`���g���Ύ��s���̃e�X�g�̓��e��c���ł��邪�A���̃X�C�b�`��L���ɂ���ɂ̓R���p�C������蒼���K�v������B

�@httperf�Ōl�I�ɋC�ɓ����Ă���̂́A���ׂẴp�����[�^���R�}���h���C������w��ł���_���B���׃e�X�g�̏��������̏�ł��낢��ƕς��Ȃ��玎���A���������܂����炻�̃p�����[�^���V�F���X�N���v�g�ɋL�q����΂悢�B��������΁A���܂��܂ȃe�X�g�𒀎��I�ɁA���邢�͕��s���Ď��{����̂��ȒP���B

�@�������A�R�}���h���C�������̉��߂̕����ɋl�߂̊Â���������B�Ⴆ�΁A�Ώ�URI�̃T�[�o�ƃp�X�̕�����ʁX�Ɏw�肷��K�v�͂Ȃ��B�܂��A�p�X�̕����̎w��Ɂu--uri�v�Ƃ����I�v�V�������g���Ă��邪�AURI�ɂ̓T�[�o�����܂܂�邱�Ƃ�����̂ŁA���̃I�v�V�������͓K�؂Ƃ͂����Ȃ��B

�@httperf�Ɠ����X�^�C���ł��������V���v���ȃc�[�����悯��΁Ahttp_load�������Ƃ悢�B

�v���O���~���O�̍ŐV������m�肽����΁uPrograming Bible�v�ɂ��i�݂��������B���Ȃ��̎d�����y�ɂ���c�[���𑽂��Љ�Ă��܂��B


�@�@�@�@�@�@ 1|2 ���̃y�[�W��

Copyright © 2010 OSDN Corporation, All Rights Reserved.

'; e_dlv.innerHTML = html; adRequest({position:dlv_pos,dom:true}); }else if(ad_type === 'gam'){ var html = '
'; e_dlv.innerHTML = html; refreshGam('InArtSpecialLink'); }else if(ad_type === 'logly'){ var html = '
'; e_dlv.innerHTML = html; loglySet(g_id); }else if(ad_type === 'google'){ var html = '
'; e_dlv.innerHTML = html; googletag.cmd.push(function(){ var slot8 = googletag.defineSlot('/43042345/nlab_artinsert_RT',[[336,280],[300,250],'fluid'],'div-gpt-ad-1551176482959-0').addService(googletag.pubads()); googletag.pubads().enableSingleRequest(); googletag.enableServices(); googletag.display('div-gpt-ad-1551176482959-0'); googletag.pubads().refresh([slot8]); }); } }; var insert_ok = function(_target,_str){ var clearfix = d.createElement('div'); clearfix.className = 'colBoxClear'; if(ad_float_fix){ e_body.insertBefore(e_dlv,_target); e_body.insertBefore(clearfix,_target.nextElementSibling); }else{ e_body.insertBefore(e_dlv,_target); } set_dlv(); }; var insert_ng = function(_str){ e_dlv.style.display = 'none'; }; var main = function(){ var e_nodes = e_body.childNodes; // BODY �����q�v�f var e_tags = []; // BODY �����^�O var p_num = []; // BODY ���� P �^�O�ʒu var p_target_num; // �g�}����ʒu var o_float = {}; // ��荞�ݗv�f var o_this = {}; // �A�N�e�B�u�^�O var o_next = {}; // �A�N�e�B�u�^�O�̎��̃^�O var flag_insert = 0; // �}���t���O // ��荞�ݗv�f�`�F�b�N var check_float = function(_e){ var e = 0; if(_e.id.match(/^col\d{3}(l|r)$/)){ e = _e; } return e; }; // �v�f�� Y ���W�ƍ����̍��v�l var get_element_y = function(_e){ var ey = 0; var eh = _e.offsetHeight; while(_e){ ey += _e.offsetTop; _e = _e.offsetParent; } return ey + eh; }; var check_ptag = function(_e){ var e = 0; if(_e.tagName && _e.tagName === 'P'){ e = _e; } return e; }; var try_insert = function(){ p_target_num = Math.floor(p_num.length / 2) - 1; if(p_target_num >= _maxrange) p_target_num = _maxrange; if(dis_con) p_target_num = 0; for(var i = p_num[p_target_num]; i < e_tags.length; i++){ o_this.e = check_ptag(e_tags[i]); if(o_this.e){ o_next.e = check_ptag(e_tags[i + 1]); if(o_next.e){ if(!o_float.e || check_float(e_tags[i - 1])){ o_float.e = check_float(e_tags[i - 1]); o_float.n = i - 1; } if(o_float.e && o_float.n < i + 1){ o_float.y = get_element_y(o_float.e); o_this.y = get_element_y(o_this.e); set_line(o_float.y,'red'); set_line(o_this.y,'blue'); if(o_float.y < o_this.y){ flag_insert = 1; insert_ok(o_next.e,_threshold + ' �p���ȏ��荞�݂���'); break; } }else{ flag_insert = 1; insert_ok(o_next.e,_threshold + ' �p���ȏ��荞�݂Ȃ�'); break; } } }else{ o_float = {}; } } if(!flag_insert){ insert_ng('�}���ʒu�Ȃ�'); } }; // �S�q�v�f����^�O�̂ݔz��ɓ���� for(var i = 0; i < e_nodes.length; i++){ if(e_nodes[i].tagName){ e_tags.push(e_nodes[i]); } } // �S�^�O���� P �^�O�ʒu��z��ɓ���� for(var i = 0; i < e_tags.length; i++){ if(e_tags[i].tagName === 'P') p_num.push(i); // �ŏ��̉�荞�ݗv�f���i�[ if(!o_float.e){ o_float.e = check_float(e_tags[i]); o_float.y = get_element_y(o_float.e); o_float.n = i; } } if(p_num.length >= _threshold){ try_insert(); }else{ insert_ng('P �^�O ' + _threshold + ' �ȉ�'); } }; if(e_body){ main(); }else{ insert_ng('�L���{���Ȃ�'); } })(document,4,5);

���ڂ̃e�[�}

���Ȃ��ɂ������߂̋L��PR