LoginSignup
1
2

ロードアベレージが高いときの調査方法

Posted at

【Linux】ロードアベレージが高いときの調査方法

概要と前談

私は、とある小さな企業で一人でサービスの開発、保守・運用をしているエンジニアである。
殿事業とはいえ、実務未経験でいきなりすべてを任されることになった。
もちろんそれほどLinuxなんぞ知らん状態であっても、担当者の力量など一切おかまいなしに、突然サーバーのアラートが上がる。そんなとき必死に調べておいたことを記しておく。

Load averageとは

コンピュータの負荷を表す指標の一つで、CPUに割り当てられた実行待ちプロセス数の平均値。
この値が大きいほど性能に対して負荷が過大になっている状態。
ロードアベレージが問題ないかを考える基準として、CPUが1コアの場合、1未満であれば、問題ない。2コアなら2未満。
なので、まずはサーバーが何コア搭載かを調べておく。
コア数調べるには下記コマンド

grep cpu.cores /proc/cpuinfo | sort -u

AWSのEC2の場合の参考)
https://aws.amazon.com/jp/ec2/instance-types/

原因切り分け方

ロードアベレージが高かったとして、じゃあ何が原因かを知る必要がある。
アラートが入ったときに下記コマンドで今のLoad averageを調べる。
LoadAverageが高い時に調査を行わないと原因の切り分けが難しい。

uptime

もしリアルタイムでなかったとしても、下記コマンドで推移と発生時刻はわかる

sar -q

runq-sz:CPU を実行するためにメモリ内で待機中のカーネルスレッド数。通常この値は 2 未満
plist-sz:プロセスリストのプロセスとスレッド数
ldavg-1:過去1分間のロードアベレージ
ldavg-5:過去5分間のロードアベレージ
ldavg-15:過去15分間のロードアベレージ

そして原因の切り分けとして、大きく下記2つ
・CPU使用率
・I/O待ちが長い

それを判定するために下記コマンドを実行
-sの後は発生時刻

sar -u -s 21:00:00

項目意味
%user:アプリケーション(ユーザプロセス)が使用している状態
%system:カーネル(OSなど)が使用している状態
%iowait: ディスクI/O待ち状態
%idle:CPUが何の処理もしない待機状態(I/O待ちの時間は除く

%userか%systemが高いと、CPU使用率という切り分けができる。

 %userが高いのはアプリケーション起因のCPU使用率がボトルネック
 %systemが高いのはアプリケーション以外の要因で生じるCPU使用率がボトルネック

%iowaitが高いと、I/O待ちが長いという切り分け

 この場合、
 ・スワップが発生している
 ・スワップが発生していない
 の2つに分けられるので下記コマンド実行

sar -r -s 21:00:00

【スワップが発生している場合、メモリ不足がボトルネック】

sar -r -s 21:00:00

項目意味
kbmemfree:メモリ空き容量(kb)
kbmemused:メモリ使用量(kb)
%memused:メモリ使用率
kbswpfree:スワップ空き容量(kb)
kbswpused:スワップ使用量(kb)
%swpused:スワップ使用率

スワップが発生していない場合、ディスクI/Oがボトルネック

sar -b -s 21:00:00

tps:秒間I/Oリクエスト 数の合計。
rtps:秒間読み込みIOリクエスト数の合計。
wtps:秒間書き込みIOリクエスト数の合計。
bread/s:秒間読み込み(ブロック単位)IOリクエストのデータ量の合計。
bwrtn/s:秒間書き込み(ブロック単位)IOリクエストのデータ量の合計

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2