「サーバの負荷」の要因
複数の要素がある
- CPU利用率
- I/O
- メモリ
- その他諸々
サーバのボトルネックの切り分け
Case 1. ロードアベレージが高い
この場合、実行したい処理が実行待ちのプロセスが多いことを意味する。
そのためスループットが低下する。
Terminal
$ top
-- load averageを確認
$ vmstat 1
-- r: 実行中および実行待ちのプロセス数
-- b: I/O待ちのプロセス数
-- swpd: メモリのスワップ使用量
-- bi: ブロック型デバイス(主にディスク)から読み込みブロック数(IN)
-- bo: ブロック型デバイス(主にディスク)への書き込みブロック数(OUT)
-- us: CPU使用率(カーネル以外)
-- wa: CPU使用のうちI/Oウェイトにかかった割合
ロードアベレージ = r: 実行中および実行待ちのプロセス数 + b: I/O待ちのプロセス数です。
Case 2. ロードアベレージが低い
- ネットワーク周り(TCPコネクション数)
cf. システムの負荷の原因を切り分ける方法 - Qiita
Q and A
Q. php test.php
すると r: 0, b: 1にならないのはなぜ?
r: 1, b: 1になる想定。
test.php
<?php
$file = 'test.txt';
while (true) {
$current = file_get_contents($file);
$current .= "test\n";
file_put_contents($file, $current);
}
A. 1実行プログラム1プロセスだから。プロセスの状態は以下の通り遷移する。
引用元. LinuxのI/OやCPUの負荷とロードアベレージの関係を詳しく見てみる - Qiita
Q. サーバの負荷を見るときは、ロードアベレージではなくCPU利用率ではだめなの?
A. だめです。
サーバの負荷の要因にはCPU利用率以外にI/O待ちのプロセス数(その他諸々)がある。
そのためCPU利用率が0%でもサーバに負荷がかかる可能性がある。
参考文献
-
LinuxのI/OやCPUの負荷とロードアベレージの関係を詳しく見てみる - Qiita
- 良い記事
-
インフラのボトルネックについて知る - ぺい
- ボトルネックの種類と対策が書いてある
- システムの負荷の原因を切り分ける方法 - Qiita
- 第6話「リソースをチェックしよう! - Linuxサーバ運用マニュアル
- load averageを見てシステムの負荷を確認する - Qiita
- サーバ負荷の原因を探る方法 | 株式会社ビヨンド
- 「非エンジニア」でもできるサーバ過負荷対策。ロードアベレージ、CPU使用率、I/Oディスク利用状況、メモリ使用量の調査方法 | Accel Brain; Media
- 9. I/Oボトルネックの計測