はじめに
Linuxを使っているシステムにおいて、性能問題が発生した時のボトルネック調査方法を記載します。サーバエンジニアとして性能問題を解決できるようになったら一人前だと思いますので、ぜひ内容理解して早期トラブル解決を実現していただけると幸いです。
ボトルネック調査フロー
-
Load Averageの確認
まず確認すべきことは、サーバの負荷を表す指標であるLoad Averageになります。この値はCPUによる実行待ち状態にあるプロセスやタスクの数の平均値を示しています。値が0に近ければ負荷はかかっていませんが、1以上の値になっている場合はサーバリソースがボトルネックになっている可能性が高いです。Load Averageはtopとかuptimeコマンドで確認可能です。
もしLoad Averageが低いのに性能が出ないようでしたら、ソフトウェアやネットワークといったLinux以外の箇所にボトルネックがあると想定されます。 -
ボトルネックの見極め
sarやvmstatコマンド実行して、ボトルネックがCPU、メモリ、I/Oなのか特定していきます。
□ボトルネックがCPUの場合
ユーザプログラムの処理あるいはシステムプログラムの処理どちらが問題になっているかを見極めます。psコマンドでプロセスごとのCPU使用率を確認し、問題が発生しているプロセスを特定します。さらに原因特定を進めるためには、traceコマンドにてトレースしていくことも有効となります。
CPUが高負荷になっている原因としては、想定以上のトランザクションが来ている、あるいはOS/ミドルウェアの機能が想定以上にCPUを使用していることが考えられます。前者の場合はサーバリソースを増強したり、トランザクションの流量制限をかける必要があります。後者の場合は、OS/ミドルウェアの状態を確認して異常な状態を取り除く必要があります。□I/O負荷が高い場合
よくあるケースとしては、スワップによるディスクアクセスが発生するケースです。こちらもsarやvmstatから、極端にメモリを使用しているプロセスがないか確認しましょう。I/O負荷についてもpsコマンドでどのプロセスがメモリを使用しているかを確認することが有効です。もしメモリが足りていないようでしたら、仮想サーバのリソース増強をする必要があるかもしれません。
他にあるケースとしては、ディスクへの書き込み自体に問題があることがあります。ハード故障でディスク書き込みが遅くなっている可能性がありますので、ハードログのログを確認してみましょう。
コメント