その他
    ホーム技術発信DoRubyサーバ単体に負荷テストを行う「stress」

    サーバ単体に負荷テストを行う「stress」

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    Web開発では負荷テストというとjmeter や ab を思い浮かべますが、今回はマシン単体に直接負荷をかけるツール「stress」を使用します。

     このツールの便利なところ3点

    1. インストール手順が簡単。
    2. ネットワークには余計な負荷をかけない。
    3. 使い方が簡単でリソースの使用量を直接指定できる。

     入手からインストールまでの流れは次のとおりです。

    入手方法:下記ページにてダウンロードしました。

    http://weather.ou.edu/~apw/projects/stress/

     今回調査したかったマシンのOSは CentOS6 でしたのでリンク先の下記 rpmファイルをインストールすることにしました。

    http://apt.sw.be/redhat/el6/en/i386/rpmforge/RPMS/stress-1.0.2-1.el6.rf.i686.rpm

    インストール:

    # rpm -ivh stress-1.0.2-1.el6.rf.i686.rpm 
    警告: stress-1.0.2-1.el6.rf.i686.rpm: ヘッダ V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY
    準備中...                ########################################### [100%]
       1:stress                 ########################################### [100%]
    

     ちなみに Debian系といった apt が使用できるOSでは apt-get install stress でインストールできるそうです。

    使い方について:

     引数を渡さずに実行すると使用方法が表示されます。

    # stress 
    `stress' imposes certain types of compute stress on your system
    
    Usage: stress [OPTION [ARG]] ...
     -?, --help         show this help statement
         --version      show version statement
     -v, --verbose      be verbose ← 詳細なメッセージを出力
     -q, --quiet        be quiet
     -n, --dry-run      show what would have been done
     -t, --timeout N    timeout after N seconds ← 負荷をかける時間を指定
         --backoff N    wait factor of N microseconds before work starts
     -c, --cpu N        spawn N workers spinning on sqrt() ← CPU負荷をかけるワーカーの数を指定
     -i, --io N         spawn N workers spinning on sync() ← IO負荷のワーカー数
    
    
     -m, --vm N         spawn N workers spinning on malloc()/free() ← メモリ負荷のワーカー数
    
    
         --vm-bytes B   malloc B bytes per vm worker (default is 256MB)← 使用するメモリ量を指定
    
    
         --vm-stride B  touch a byte every B bytes (default is 4096)
         --vm-hang N    sleep N secs before free (default is none, 0 is inf)
         --vm-keep      redirty memory instead of freeing and reallocating
     -d, --hdd N        spawn N workers spinning on write()/unlink()
         --hdd-bytes B  write B bytes per hdd worker (default is 1GB)
         --hdd-noclean  do not unlink files created by hdd workers
    
    Example: stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s
    
    Note: Numbers may be suffixed with s,m,h,d,y (time) or B,K,M,G (size)
    

    好みの引数を渡して実行してください。別のプロンプトで接続し top や vmstat などを表示していると負荷状態の変化が見れて面白いです。

    例:メモリ負荷をどんどん上げていく。

    stress –cpu 2 –io 2 –vm 2 –vm-bytes 512M –timeout 60s

    stress –cpu 2 –io 2 –vm 2 –vm-bytes 1024M –timeout 600s

    stress –cpu 2 –io 2 –vm 2 –vm-bytes 2048M –timeout 1200s

    stress –cpu 2 –io 2 –vm 2 –vm-bytes 4096M –timeout 1200s

    stress –cpu 2 –io 2 –vm 2 –vm-bytes 3072M –timeout 1200s

     負荷の上げ過ぎで stress が起動しなくなったのでさげた。

    タイムアウト設定した時間より前に停止させるには Ctrl + C を押します。

    必要なライブラリ:

    # ldd /usr/bin/stress 
            linux-gate.so.1 =>  (0x00d0c000)
            libm.so.6 => /lib/libm.so.6 (0x0048c000)
            libc.so.6 => /lib/libc.so.6 (0x00e3a000)
            /lib/ld-linux.so.2 (0x008d9000)
    

     インストールがうまくいかない場合などご参照ください。