OSリソース情報を取得するときの注意点
ここまでに紹介した情報取得のコマンド群には、(特に商用運用中の本番環境で)実行する際にいくつか注意するべき点があります。
取得間隔は長すぎても短すぎてもダメ
先に紹介した取得コマンドは、いずれも10秒間隔を指定しています。この長さは、コマンド引数の「10」の部分やsleepの引数を変更すれば任意の間隔に変更可能です。 しかし、ことパフォーマンス解析の目的においては、10秒を推奨しています。というのも、これらのコマンドの出力結果は、いずれも取得間隔における平均値であるため、あまり長すぎると粒度が粗くなり解析に役立ちません。 商用での性能監視で、10分おきや1時間おきに取得しているケースがあるのですが、これは長期的なサイジングのためならばともかく、性能問題の解析には使えません。
かといって、あまり短すぎると、ログファイルへの出力量が大きくなり、ストレージへのI/O負荷が高くなるとともに、ログファイルがストレージを圧迫する危険があります。vmstatのように1回あたりに1行しか出力しないコマンドはまだよいのですが、mpstatのようにCPUコア別に出力したり、iostatのようにボリューム別に出力するコマンドでは、空き領域が十分であることの確認が必要です。
fflushで取り漏れをなくす
fflush()関数は、バッファ上のデータをフラッシュしてファイルに書き出します。これがないと、コマンドを停止したとき最後の数分間のデータが取り漏れることがあります。これは、awkが出力時にバッファリングを行っているためです。
strftimeでタイムスタンプを付与する
性能取得コマンドの中は、vmstatのようにデフォルトではタイムスタンプを出力しないものもあります。また、mpstatは出力したタイムスタンプに日付が含まれていないため、日またぎの場合にうまく集計できません。
日付と時刻を含むタイムスタンプを出力することで、出力結果のファイルをExcelなどに取り込んで簡単にグラフ化することができます。たとえば、mpstatの結果をグラフ化すると下図のようになります。
このように可視化すると、時系列での傾向を一望することができるため、スローダウンが起きていた状況と平常時の比較などが簡単に行えます。
なお、「nagios」や「cacti」のようなオープンソースの監視ツールを使って、このような可視化を行っているシステムもあると思いますが、性能解析時に必要な詳細情報まではグラフ化されないことが少なくありません。必要な情報をすぐにグラフ化することのできるフォーマットで出力しておくことが、問題解析のためには重要です。
次回は、それぞれのリソースについて、どのような観点から解析を行っていくかを解説したいと思います。お楽しみに。
