この時は、結果をファイルに残すために、結局(あきらめて)sar コマンド*1を使うことになった。で、ついでにメモをしておこうかと。
例えば、1秒おきのCPUの情報(-u オプション)を、時間制限なくログファイルに残す場合には、次のように実行する(クーロンで定期実行されているかもしれないが、一時的に取得間隔を短くしたい場合など)。
# バイナリファイルに残す /usr/bin/sar 1 0 -u -o /log/sar_cpu > /dev/null 2>&1 & # テキストファイルに残す /usr/bin/sar 1 0 -u >> /log/sar_cpu.log &
ここで、sarのman的には、インターバル 1 とカウント 0 はコマンドの最後に持っていくのだが、それだと -d オプションだけが(なぜか)動かないので、最初に持ってきている(これでなぜか動く)。どうした RHEL5.5!
CPUの情報を取得するには、例えば“/usr/bin/sar 1 0 -u -P ALL”を実行する。ここで、“-P ALL”は、コアごとに、全てのコアの情報を取得することを表している。きちんと、全部のコアが使われているかを見たかったのだ。あとは、I/Oウェイトがどの程度かをね。出力結果の意味は、次の通り。
%user : ユーザレベル(アプリケーション)のCPU使用率 %nice : niceで優先度が変更されたプロセスのCPU使用率 %system : カーネルのCPU使用率 %iowait : I/Oリクエスト待ちのアイドル時間の割合 %steal : ハイパーバイザによる仮想CPUの切り替え時間の割合 %idle : アイドル時間(I/O待ち以外)の割合
メモリの情報を取得するには、例えば“/usr/bin/sar 1 0 -r”を実行する。OSレベルでは、あまり確認するところはないのだが、、スワップとか使っていないことだけは確認したかった。出力結果の意味は、次の通り。
kbmemfree : 空きメモリ量(キロバイト) kbmemused : 使用メモリ量(キロバイト) %memused : 使用メモリ量の割合 kbbuffers : カーネルのバッファ(キロバイト) kbcached : カーネルのキャッシュ(キロバイト) kbswpfree : 空きスワップ領域(キロバイト) kbswpused : 使用スワップ領域(キロバイト) %swpused : 使用スワップ領域の割合 kbswpcad : スワップ領域のキャッシュ(キロバイト)
I/Oの情報を取得するには、例えば“/usr/bin/sar 1 0 -d”を実行する。デバイスごとのI/Oを見たかった。出力結果の意味は、次の通り。
tps : 1秒あたりのI/O指示数 rd_sec/s : 読み込まれたセクタ(512バイト)数 wr_sec/s : 書き込まれたセクタ(512バイト)数 avgrq-sz : セクタ内の平均リクエスト数 avgqu-sz : リクエストの平均キュー(待ち)数 await : I/Oリクエストの平均待ち時間(ミリ秒)、キュー中の時間+処理時間 svcmt : I/Oリクエストの平均処理時間(ミリ秒) %util : I/O待ちのCPU時間の割合
自分が見たのは、これだけw
2011/07/01追記
(自分的に)大事なことをメモし忘れた。これを言っておかないと、パフォーマンスを確認しているアプリのチームに「で、どこ見たらいいの?」って言われる*2。
I/Oの情報は、デバイスファイルごとに出力される。各々のデバイスファイルが何者であるかは、次のようにして確認すればよい。
*1:詳細は http://sebastien.godard.pagesperso-orange.fr/ を参照のこと。
*2:ローカルディスクしかないようなサーバはよいとして、SANストレージに接続されていて大量のデバイスをマウントしているような場合。