性能・負荷を把握するためのコマンドについて

Linuxで性能・負荷を把握するための方法を覚えたいなと思って、まずはそのためにもボトルネックを見極める作業をベースに性の方法とそのためのコマンドを整理しておきたい、と思ったので書いておく。

ボトルネック見極め作業の基本的な流れ

ロードアベレージを見る

CPU、I/Oのいずれがボトルネックかを探る

  • ロードアベレージが高い場合、CPU、I/Oのどちらかに原因があるかを探る。
  • sar, vmstatを利用することで、時間経過とCPU使用率やI/O待ち率の推移を確認することができる。この結果を参考にして、CPU、I/Oの当たりを付ける。

CPU負荷が高い場合

  • ユーザプログラム、システムプログラム、なんの処理がボトルネックの原因かをtop,sarを利用して見極める。
  • psを利用して、確認できるプロセスの状態やCPU使用時間などを見ながら、原因となっているプロセスを特定する。
  • プロセスの特定後、より詳細を調査したい場合は、starceでのトレース、oprofileでのプロファイリング、などを行い、ボトルネック箇所を絞り込む。
  • ディスクやメモリ容量などその他の部分がボトルネックとなっていないにもかかわらず、スループットが上がらない場合は、サーバ増設やプログラムのロジックやアルゴリズムの改修で対応。
  • プログラムが暴走してCPUに必要以上の負荷がかかってしまっている場合は、発生している不具合を取り除く。

I/O負荷が高い場合

  • たいてい、プログラムからの入出力が多くて負荷が高いか、スワップが発生してディスクアクセスが発生しているのか、が原因。そのため、sar,vmstatを利用して、スワップの発生状況を確認して問題を切り分ける。
  • psを利用して特定のプロセスが極端にメモリを消費していないかを確認する。
  • プログラムの不具合でメモリを使い過ぎている場合は、プログラムを改善する。
  • 搭載メモリが不足している場合は、メモリ増設(スケールアップ)で対応する。メモリが増設できない場合は、分散を検討する。
  • メモリ増設でキャッシュ領域を拡大できる場合、メモリを増設する。
  • メモリ増設で対応できない場合、データの分散やキャッシュサーバの導入等を検討する。また、プログラムの改修によるI/O頻度の軽減を検討する。

性能、負荷計測に利用するコマンド(OS)

top
ある瞬間のOSの状態のスナップショットを表示する。


ps
ps(Report Process Status)は、プロセスが持つ情報を出力するツール。
よく使うpsコマンドの例。

$ ps aux | sort -nr -k2 | head -5 #CPU使用率の高い順5件を表示
$ ps aux | sort -nr -k3 | head -5 #Memory使用率の高い順5件を表示


sar
sar(System Activity Reporter)は、OSが報告する各種指標を参照するツール。
2つの用途がある。

  • 過去の統計データにさかのぼってアクセスする(デフォルト)
  • 現在のデータを周期的に確認する

sarが利用出来るように、sysstatパッケージに含まれているため、sysstatパッケージをインストール。

$ sudo yum install sysstat

よく使うsarのオプションとその内容。

コマンド・オプション 内容
sar -u CPU使用率を見る
sar -q ロードアベレージを見る
sar -r メモリの利用状況を見る
sar -W スワップ発生状況を見る


vmstat
vmstat(Report Virtual Memory Statistics)は、仮想メモリ関連情報を参照するツール。

参考書籍

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)