24時間365日フルマネージドホスティングサービスのデイーネット

HOME'; $txt2 = '
  • サーバサービス
  • '; $txt3 = '
  • サポート
  • '; $txt4 = '
  • ホームページ制作
  • '; $txt5 = '
  • 技術情報
  • '; if($dir == "") $txt1 = ''; if($dir == "server_service") $txt2 = ''; if($dir == "support") $txt3 = ''; if($dir == "hp_service") $txt4 = ''; if($dir == "technology") $txt5 = ''; ?>

    負荷テスト中のサーバリソース情報を1秒間隔で確認する方法

    こんにちは。ここ最近は負荷テスト三昧な浅見です。

    ディーネットで負荷テストをさせていただくときには、JMeterを良く利用しています。JMeterは、ECサイトの会員登録や購入など複雑なシナリオを手軽に作成できるオープンソースの負荷テストツールです。

    JMeterを使うことで、簡単に負荷をかけることができるのですが、サーバのCPUやメモリなどのリソース状況は別の手段で把握する必要があります。CloudWatch等の監視ツールを使うことでも対応できるのですが、取得間隔が1分と長く荒い情報になりがちです。

    ディーネットでは、1秒間隔で精度の高いリソース情報を取得するために、sarを利用しています。と、いうことで、負荷テスト時にsarとkSarを使ってリソース情報を取得する方法をご紹介していこうと思います。

    リソース取得の全体概要

    負荷テスト対象サーバは複数台あることがほとんどだと思います。それぞれのサーバで取得してもいいのですが、大変手間がかかります。

    ディーネットでは、図のように、JMeterのマスタサーバを起点に、各サーバのsar情報を取得し、最終的にはkSarでグラフ化するようにしています。 jmeter-sar.jpg

    グローバルIPを持っているサーバからsarの情報を取得する

    グローバルIPを持っているサーバについては、JMeterのマスタサーバからssh経由でsarを実行し、kSarでグラフ化を行います。

    WEBサーバへJMeterマスタの公開鍵を登録

    JMeterマスタ上で鍵を作成します。

    # ssh-keygen -t rsa
    

    作成した公開鍵の情報をコピーします。

    # cat ~/.ssh/id_rsa.pub
    

    WEBサーバへログインして、公開鍵の登録を行います。

    # mkdir ~/.ssh
    # chmod 700 ~/.ssh
    # vi ~/.ssh/authorized_keys
    id_rsa.pubでコピーした内容を追記
    # chmod 600 ~/.ssh/authorized_keys
    

    JMeterマスタサーバからログインの確認を行い、無事sshログインできれば完了です。

    実行コマンド

    リソース情報取得の実行には下記コマンドを利用します。

    # /usr/bin/java -jar /usr/local/kSar/kSar.jar -input "cmd://ssh web_server sar -bBdqrRSuvwWy -I SUM -I XALL -u -P ALL -n DEV 1" -outputPDF /tmp/ksar/web_server.pdf
    

    ※対象サーバがCentOS5の場合は、Sオプションを除外した「-bBdqrRuvwWy」オプションとし、実行回数と繰り返し回数の指定を「1」ではなく、「1 0」と指定する必要があります

    kSarを使って、sarで取得できる情報をグラフ化しています。グラフは、「/tmp/ksar」ディレクトリに、「web_server.pdf」という形で保存されます。

    負荷テスト中はなるべく細かい粒度で情報を取得したいので、sarコマンドの実施間隔は1秒です。また、テスト完了の時間を予測するのが難しいため、回数無制限で実行しています。

    上記コマンドを実行すると、次のようなプロセスが生成されます。

    [JMeterマスタ]

    # ps auwxxx|grep sar
    /usr/bin/java -jar /usr/local/kSar/kSar.jar -addHTML -input cmd://ssh 127.0.0.1 sar -bBdqrRSuvwWy -I SUM -I XALL -u -P ALL -n DEV 1 -outputPDF /tmp/ksar/web_server.pdf
    ssh 127.0.0.1 sar -bBdqrRSuvwWy -I SUM -I XALL -u -P ALL -n DEV 1
    

    [対象WEBサーバ]

    # ps auwxxx|grep sar
    sar -bBdqrRSuvwWy -I SUM -I XALL -u -P ALL -n DEV 1
    

    終了コマンド

    回数無制限で実施しているため、明示的に終了させる必要があります。

    終了させるためには、対象WEBサーバのsarコマンドのプロセスkillが必要です。sarのプロセスを確認して、killコマンドで終了させましょう。

    # ssh root@web_server "kill -9 `ps auwxx|grep 'sar -bBdqrRSuvwWy'|grep -v grep |grep -v java|awk '{print $2}'`"
    

    sarのプロセスをkillすると、下記のようなメッセージが表示されて「/tmp/ksar/web_server.pdf」へpdfが生成されます。

    # time to parse: 23235ms number of line: 16331 line/msec: 0.0
    

    グローバルIPを持っていないサーバからsarの情報を取得する

    グローバルIPを持っていないサーバの場合は、踏み台サーバでポートフォワードを行うことで、グローバルIPを保持するサーバと同様の方法でグラフ化を行っています。

    DBサーバへJMeterマスタの公開鍵を登録

    WEBサーバのときと同様に、DBサーバへ公開鍵の登録を行います。

    ポートフォワード設定

    WEBサーバからDBサーバへポートフォワードの設定を行います。

    実行時にポートフォワードを意識する必要がないように、.ssh/configへ設定を記載していきます。

    # vi ~/.ssh/config
    
    Host           web_server
    HostName       XXX.XXX.XXX.XXX
    User           username
    GatewayPorts   yes
    LocalForward   10022 127.0.0.1:10022
    IdentityFile   ~/.ssh/id_rsa
    
    Host           db_server
    HostName       192.168.1.10
    User           username
    GatewayPorts   yes
    IdentityFile   ~/.ssh/id_rsa
    LocalForward   10022 192.168.1.10:22
    ProxyCommand   ssh -CW %h:%p web_server
    

    dbサーバへssh接続確認を行います。

    # ssh db_server
    

    コマンドの実行

    コマンドの実行は、グローバルIPを持っているサーバのときと同様です。

    ホスト名の指定を、~/.ssh/configのHostに指定した名前で行うことで、自動的にポートフォワードして実行されます。

    参考:sarとkSarのインストール方法

    sysstatのインストール方法

    CentOSの場合、標準リポジトリからインストールが可能です。

    # yum install -y sysstat
    

    kSarのインストール方法

    kSarはsourceforgeからダウンロードの後、解凍して利用が可能です。

    https://sourceforge.net/projects/ksar/ へアクセスしてzipファイルをダウンロードします。

    ダウンロードしたファイルをサーバへアップしてunzipコマンドで解凍して利用が可能です。

    ※または、wgetで直接取得が可能です。

    # wget https://downloads.sourceforge.net/project/ksar/ksar/5.0.6/kSar-5.0.6.zip
    # unzip kSar-5.0.6.zip
    

    まとめ

    今回は負荷テスト中のサーバリソースの情報を取得する方法を紹介しました。

    都度コマンド実行するのは大変なので、シェルやphp等で自動化させて実行すると便利だと思います。

    • このページの先頭へ

    • 東京本社
      〒105-0001東京都港区虎ノ門2-3-22 第一秋山ビル5F
      TEL:03-3591-8887 FAX:03-3591-8886
    • 大阪本社
      〒541-0041 大阪市中央区北浜2-6-11北浜エクセルビル5F
      TEL:06-6231-8887 FAX:06-6231-8897

    • 認証範囲はこちらをご覧ください。

    Denet logo

    クラウドサービス・データセンタ・高機能専有サーバ・共有サーバホスティングサービス 株式会社ディーネット
    dot_bar