本日、いい肉の日(11/29)にPerfMonger 0.5.0を肉リリースしました。
PerfMongerは性能測定ジャンキーのためのリアルタイム性能測定・可視化ツールです。 現在は、Linuxを対象プラットフォームとして開発しています。
Linuxサーバにおいてリアルタイムな性能測定を行うためには top(1) や iostat(1) 、mpstat(1) などのコマンドが用いられますが、これらのコマンドでは
- 0.1秒間隔でCPU使用率やI/O性能を測定したい
- CPU使用率やI/O性能の時間変化を記録しておき、あとから手軽に集計処理をしたい
- ターミナル上の文字ではなくリアルタイムなグラフでCPU利用率やI/O性能を確認したい
といった要望に応えることができませんでした。 これを可能にするのが性能測定ツールPerfMongerです。
インストール
新しくリリースしたPerfMonger 0.5.0からは、RHEL(+CentOS) 5/6を対象としたrpmパッケージをyumレポジトリ(package.hayamiz.com)から提供しはじめました。 RHEL(+CentOS)をお使いの方は、下記の2行のコマンドを実行するだけですぐにPerfMongerを使いはじめることができます。
rpm -Uvh http://package.hayamiz.com/hayamiz-repos-1.0.0-0.noarch.rpm
yum install perfmonger
また、その他Linuxディストリビューションを利用している方は、ソースコードからビルドすることで利用することができます。
wget http://hayamiz.com/~haya/files/perfmonger-0.5.0.tar.gz
tar xvf perfmonger-0.5.0.tar.gz
cd perfmonger-0.5.0/
./configure
make install
PerfMongerのはじめかた
まずは、何も引数を指定せずに perfmonger
コマンドを実行してみます。
すると、利用可能なサブコマンド一覧が表示されます。
$ perfmonger
Usage: -e [options] COMMAND [args]
-h, --help Show this help
-v, --version Show version number
Commands:
record Record system performance information
stat Run a command and record system performance during execution
plot Plot system performance graphs collected by 'record'
bukko Gather all possible system config information
server Launch self-contained HTML5 realtime graph server
summary Show a summary of a perfmonger log file
100MBのファイルを作るときの性能を測定してみる
CPUやI/O負荷がそれなりにかかる処理として、ここでは試しにdd
コマンドで100MBのファイルを作るときの性能測定を行ってみることにします。
PerfMongerをインストールしたマシンのターミナルで、次のコマンドを実行してみましょう。
perfmonger stat -- dd if=/dev/urandom of=/tmp/100mb.dat bs=1M count=100
すると、次のように
- 実行時間
- CPU使用率の内訳
- 各種I/O性能
の測定結果のまとめが表示されます。
$ perfmonger stat -- dd if=/dev/urandom of=/tmp/100mb.dat bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 40.6064 s, 2.6 MB/s
Execution time: 40.6925
== Performance summary of 'dd if=/dev/urandom of=/tmp/100mb.dat bs=1M count=100' ==
record duration: 40.00 sec
* Average CPU usage (MAX: 200 %)
* Non idle portion: 131.04
%usr: 27.10
%sys: 101.97
%irq: 1.14
%soft: 0.84
%other: 0.00
* Idle portion: 68.96
%iowait: 3.23
%idle: 65.73
* Average DEVICE usage: vda
read IOPS: 11.31
write IOPS: 17.30
read throughput: 0.10 MB/s
write throughput: 2.57 MB/s
read latency: 6.72 msec
write latency: 123.30 msec
read amount: 4.00 MB
write amount: 102.62 MB
* Average DEVICE usage: dm-0
read IOPS: 16.01
write IOPS: 656.86
read throughput: 0.11 MB/s
write throughput: 2.57 MB/s
read latency: 10.17 msec
write latency: 213.34 msec
read amount: 4.20 MB
write amount: 102.63 MB
* TOTAL DEVICE usage: vda, dm-0
read IOPS: 27.32
write IOPS: 674.16
read throughput: 0.21 MB/s
write throughput: 5.13 MB/s
さて、perfmonger stat
を実行したカレントディレクトリを見てみると、perfmonger.log
というファイルが新たに作られています。
このファイルには、PerfMongerが1秒毎に測定したCPU利用率やI/O性能情報がJSON形式で1行1レコードとして記録されています。つまり、このファイルを直接利用することでより正確に測定情報を集計したり、グラフ化したりすることができます。
また、perfmonger.log
に記録された測定結果のまとめをもう一度確認したいときは、perfmonger summary
コマンドを利用することができます。
$ perfmonger summary perfmonger.log
== Performance summary of 'perfmonger.log' ==
record duration: 40.00 sec
* Average CPU usage (MAX: 200 %)
* Non idle portion: 131.04
%usr: 27.10
%sys: 101.97
%irq: 1.14
%soft: 0.84
%other: 0.00
* Idle portion: 68.96
%iowait: 3.23
%idle: 65.73
(略)
グラフ化したいときには、perfmonger plot
コマンドが使えます。
ただし、gnuplot
がインストールされている必要があります。
$ perfmonger plot perfmonger.log
リアルタイムに性能をグラフ表示する
PerfMonger をインストールしたマシンで次のコマンドを実行してみます。
$ perfmonger server
PerfMonger Realtime Monitor: http://localhost:20202/dashboard
[2013-11-29 15:14:48] INFO WEBrick 1.3.1
[2013-11-29 15:14:48] INFO ruby 2.0.0 (2012-12-01) [i686-linux]
[2013-11-29 15:14:48] INFO WEBrick::HTTPServer#start: pid=11782 port=20202
(...)
すると、グラフ表示用のHTTPサーバが立ち上がり、サーバのURLを表示してくれます。 表示されたURL(上の例では http://localhost:20202/dashboard )にアクセスすると、CPU利用率がリアルタイムで表示されます。
試しに、この hayamiz.comが動いているさくらVPSのサーバ上でperfmonger server
を起動したものを、下にiframeでライブデモ表示しています。
まだまだ安定運用できるほど作りこんでいないので、見るタイミングによっては止まっているかもしれませんが。。。
hayamiz.com サーバでの perfmonger server ライブデモ
PerfMongerはまだまだ undocumented な機能が多いので、更に使い込んでみたいという方はTwitterで @hayamiz に話しかけてみてください。 また、GitHub上で開発しているので、pull requestやIssuesへのバグ報告・機能要望なども歓迎します。
Debianのパッケージングとか面倒なのでだれかやって欲しいです。
ツイート