サーバが重い時の資源ボトルネック特定
「サーバが重い」と言われたが原因不明。CPU・メモリ・ディスクI/Oのどれが詰まっているのかを、定番ツールで順番に切り分けたい。
手順
uptimeロードアベレージを3つの時間軸で見る。CPUコア数より大きければ「何かが待っている」。上がり続けているか収まりつつあるかも分かる。vmstat 1 51秒間隔で5回計測する。r列(実行待ち)が多ければCPU競合、b列(割り込み不可の待ち)が多ければI/O待ち、si/so列が動いていればスワップ発生。free -hメモリの実態を見る。available(利用可能)が枯渇していれば深刻。buff/cacheが大きいのは正常なので慌てない。iostat -x 1 5ディスクごとの%util(使用率)とawait(応答待ち時間)を見る。%utilが100%近くに張り付き、awaitが大きければディスクがボトルネック。Debian系ではsysstatパッケージの導入が必要。top -o %CPUここまでで疑った資源を食っているプロセスを特定する。CPU犯ならこのまま、メモリ犯なら-o %MEMに切り替えて上位を見る。pidstat -d 1 5I/Oがボトルネックの場合、プロセス別のディスク読み書き量で犯人を特定する。「どの資源か」→「どのプロセスか」の順で必ず絞る。⚠
注意いきなりプロセスをkillしないこと。まず「CPU・メモリ・I/Oのどれか」を数字で確定させてから犯人を探す。順番を守らないと、無関係なプロセスを止めて二次被害を生む。