[AIX]パフォーマンス確認の入口(ほぼvmstatの話)
注1:
この文書での方法は1つの考え方でしかなく異論反論があると思いますので、そういった意見をお持ちの方はぜひとも別の文書で考え方を公開ください。
注2:
vmstat、iostatはnmonでもオプション次第では同等のデータが取得できると思いますが、nmonはインターバルが短くできず、またCPU、I/Oやメモリなどの詳細な解析もできないため、この文書ではnmonには触れません。
特定のプロセスのみが遅い場合:
※遅いプロセスがミドルウェアやOSなどの製品が提供しているプロセスの場合は、それ以上の切り分け実施前にサポートに問い合わせても問題は無いと思われますが、ボトルネックを特定してから問い合わせた方が効率が良いです。
procstack、pdump.sh、gencore、truss、tprof、curtなどを複数回取得しプロセス内で時間がかかっているサブルーチンを確認します。
ps -efのTIME(CPU使用時間)が増えていない場合は遅いのではなくハングしていると判断できるため、procstack、pdump.sh、gencoreを1度取るだけで十分な可能性があります。
サブルーチンの実行内容がネットワーク待ちなら通信相手の挙動確認やiptraceでTCP/IPレベルの遅延の有無の確認へ、I/O待ちならiostatへ、ロック待ちなどの場合はプロセスオーナーに確認へ、などに分岐していきますが、この文書の本題ではないためここには記載しません。
システム全体の動きが遅い場合:
まずはvmstat -wt 1で全体の状態を確認します。
メモリ関連の項目: 問題がありそうならsvmon -G/-P/-S等で詳細を確認します。
free -> ファイルキャッシュでの使用量が考慮されていない値なので監視すべきではない。
pi/po -> ページングスペースI/Oがある。一般的に物理メモリが足りない状況。
fr/sr -> ページスキャンが起こっている。pi/poが無ければキャッシュの破棄なので気にする必要は無い。
CPU関連の項目: 問題がありそうならtprof、curt等で詳細を確認します。
r(run queue) -> CPU待ちで動けていないスレッド数。論理CPU数より大きい状態が続いている場合はCPU不足が疑われる。
cpuのus/sy/id -> マイクロパーティショニング環境では見る必要性が低い項目。Dedicated CPUの場合はシンプルにCPU使用量を表す。(ただしidが0だからと言ってrが上がっていない場合はCPUを効率的に使えているだけでボトルネックとはならない。)
cpuのpc/ec -> マイクロパーティショニング環境でのCPU使用量を表す項目。
faultsのsy -> システムコール数。ここが上がっている場合はプロセスから多量のシステムコール呼び出しがあったので、想定外の挙動をしているプロセスが無いかを確認した方が良い。
I/O関連の項目: 問題がありそうならiostat等で詳細を確認します。
wa -> I/O Pendingがある状態でRunnableなスレッドがいなかった時間。I/Oがあったことしか分からない項目でI/O待ちで滞留していたスレッドがあったかどうかは判別不能ではあるが、Runnableなスレッドがいない状態でシステム全体の動作が遅いのであればI/O待ちのスレッドがいたことは疑われる。
どれも該当しない場合はPerfpmrの取得し、(パフォーマンス系のコンポーネントに特化したグローバルSMEに担当してもらえる確率を上げるために)英語のCaseで問い合わせるのが良いと思われます。
問い合わせに最低限必要な項目は下記の通りです。
・想定のパフォーマンス(類似環境で同じ処理を流した時にかかる時間、処理の多重度を上げると指数関数的に遅くなるなど)と比べてどの程度遅いのか?
・perfpmrを取った時と取らなかった時で同じ処理のパフォーマンスにどの程度の差があるか?(Perfpmr有無でBadCaseの処理時間)
・Good case/Bad case、Perfpmr有無でそれぞれテストを実施した日時(秒単位)
・Good case/Bad caseのperfpmr
・Good case/Bad case、Perfpmr有無でそれぞれテストを実施した直前直後のsnap(snap -aZcで作成される/tmp/ibmsupt/snap.pax.Z)
参考:
procstack コマンド
https://www.ibm.com/docs/ja/aix/7.2.0?topic=p-procstack-command
pdump tool - Overview
https://www.ibm.com/support/pages/pdump-tool-overview
gencore コマンド
https://www.ibm.com/docs/ja/aix/7.2.0?topic=g-gencore-command
truss コマンド
https://www.ibm.com/docs/ja/aix/7.2.0?topic=t-truss-command
tprof コマンド
https://www.ibm.com/docs/ja/aix/7.2.0?topic=t-tprof-command
trace デーモン
https://www.ibm.com/docs/ja/aix/7.2.0?topic=t-trace-daemon
トレース機能の開始
https://www.ibm.com/docs/ja/aix/7.2.0?topic=facility-start-trace
curt コマンド
https://www.ibm.com/docs/ja/aix/7.2.0?topic=c-curt-command
perfpmr 取得ガイド
https://www.ibm.com/support/pages/perfpmr-%E5%8F%96%E5%BE%97%E3%82%AC%E3%82%A4%E3%83%89
vmstat コマンド
https://www.ibm.com/docs/ja/aix/7.2.0?topic=v-vmstat-command
nmon コマンド
https://www.ibm.com/docs/ja/aix/7.2.0?topic=n-nmon-command
iostat コマンド
https://www.ibm.com/docs/ja/aix/7.2.0?topic=i-iostat-command
iptrace 取得ガイド
https://www.ibm.com/support/pages/node/682773
ipreport コマンド
https://www.ibm.com/docs/ja/aix/7.2.0?topic=i-ipreport-command
AIX 初期資料収集ガイド(snap)
https://www.ibm.com/support/pages/node/682733
Power Systemsソフトウェアサポート製品(AIX、PowerVM、PowerHA、IBM i、vHMC)の英語でのサポートへの問い合わせについて
https://www.ibm.com/support/pages/power-systems%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E8%A3%BD%E5%93%81aix%E3%80%81powervm%E3%80%81powerha%E3%80%81ibm-i%E3%80%81vhmc%E3%81%AE%E8%8B%B1%E8%AA%9E%E3%81%A7%E3%81%AE%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%B8%E3%81%AE%E5%95%8F%E3%81%84%E5%90%88%E3%82%8F%E3%81%9B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6