Linuxサーバのボトルネック調査方法

はじめに

Linuxを使っているシステムにおいて、性能問題が発生した時のボトルネック調査方法を記載します。サーバエンジニアとして性能問題を解決できるようになったら一人前だと思いますので、ぜひ内容理解して早期トラブル解決を実現していただけると幸いです。

ボトルネック調査フロー

  1. Load Averageの確認

    まず確認すべきことは、サーバの負荷を表す指標であるLoad Averageになります。この値はCPUによる実行待ち状態にあるプロセスやタスクの数の平均値を示しています。値が0に近ければ負荷はかかっていませんが、1以上の値になっている場合はサーバリソースがボトルネックになっている可能性が高いです。Load Averageはtopとかuptimeコマンドで確認可能です。
    もしLoad Averageが低いのに性能が出ないようでしたら、ソフトウェアやネットワークといったLinux以外の箇所にボトルネックがあると想定されます。

    Load Averagaの数値が上がる要因は、CPUプロセスが下記の状態になった場合
    ・他のプロセスがCPUを使っていて、処理が待たされている場合
    ・ディスク入出力が終わるまで、処理が待たされている場合
  2. ボトルネックの見極め

    sarやvmstatコマンド実行して、ボトルネックがCPU、メモリ、I/Oなのか特定していきます。

    □ボトルネックがCPUの場合
    ユーザプログラムの処理あるいはシステムプログラムの処理どちらが問題になっているかを見極めます。psコマンドでプロセスごとのCPU使用率を確認し、問題が発生しているプロセスを特定します。さらに原因特定を進めるためには、traceコマンドにてトレースしていくことも有効となります。
    CPUが高負荷になっている原因としては、想定以上のトランザクションが来ている、あるいはOS/ミドルウェアの機能が想定以上にCPUを使用していることが考えられます。前者の場合はサーバリソースを増強したり、トランザクションの流量制限をかける必要があります。後者の場合は、OS/ミドルウェアの状態を確認して異常な状態を取り除く必要があります。

    □I/O負荷が高い場合
    よくあるケースとしては、スワップによるディスクアクセスが発生するケースです。こちらもsarやvmstatから、極端にメモリを使用しているプロセスがないか確認しましょう。I/O負荷についてもpsコマンドでどのプロセスがメモリを使用しているかを確認することが有効です。もしメモリが足りていないようでしたら、仮想サーバのリソース増強をする必要があるかもしれません。
    他にあるケースとしては、ディスクへの書き込み自体に問題があることがあります。ハード故障でディスク書き込みが遅くなっている可能性がありますので、ハードログのログを確認してみましょう。

コメント