LinuxサーバーでI/Oの問題をデバッグする方法は何ですか?
私は使用しています:
# Nohup top -b -d 10 > /var/log/top.log &
# Nohup iotop -b -d 5 -o -t > /var/log/iotop.log &
PS:ハードウェアはクリーンで、新しく、問題ありません。
SWAPはまったく使用されておらず、次のことが多く見られます。
[jbd2/sda6-8]
[jbd2/sda2-8]
[loop0]
[loop1]
[events/0]
[flush-8:0]
[kondemand/3]
[ksoftirqd/3]
[kblockd/2]
サーバーはほとんどの時間正常であり、その後ランダムに6.00〜38.00の負荷平均に急上昇します。
私が箱に持っているのはPHP/Apache/nginxだけです。
例:
top - 03:25:11 up 1 day, 5:00, 3 users, load average: 6.87, 2.98, 1.90
Tasks: 224 total, 1 running, 222 sleeping, 0 stopped, 1 zombie
Cpu0 : 4.7%us, 1.0%sy, 0.0%ni, 21.3%id, 73.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 15.0%us, 2.3%sy, 0.0%ni, 60.0%id, 22.7%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 6.7%us, 1.7%sy, 0.0%ni, 0.0%id, 91.3%wa, 0.0%hi, 0.3%si, 0.0%st
Cpu3 : 0.0%us, 0.0%sy, 0.0%ni, 91.1%id, 8.6%wa, 0.0%hi, 0.3%si, 0.0%st
Mem: 8031932k total, 7971176k used, 60756k free, 231236k buffers
Swap: 8191992k total, 0k used, 8191992k free, 6334420k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2231 mysql 20 0 2576m 537m 6348 S 3.0 6.9 66:35.85 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --us
678511 user 20 0 245m 43m 20m D 1.0 0.6 0:01.08 /usr/bin/php
678539 user 20 0 255m 49m 21m D 0.7 0.6 0:00.33 /usr/bin/php
678551 user 20 0 230m 14m 8392 D 0.7 0.2 0:00.08 /usr/bin/php
678565 user 20 0 231m 17m 10m D 0.7 0.2 0:00.08 /usr/bin/php
36 root 20 0 0 0 0 S 0.3 0.0 1:04.45 [kblockd/2]
60 root 20 0 0 0 0 S 0.3 0.0 0:51.02 [kswapd0]
1653 root 20 0 0 0 0 S 0.3 0.0 0:54.87 [kondemand/2]
3394 root 20 0 353m 3480 1496 S 0.3 0.0 7:26.66 /usr/sbin/db_governor
494915 nobody 18 -2 61104 19m 988 S 0.3 0.2 0:38.74 nginx: worker process
678473 nobody 20 0 96912 13m 2304 S 0.3 0.2 0:00.04 /usr/local/Apache/bin/httpd -k start -DSSL
678474 nobody 20 0 96904 13m 2304 S 0.3 0.2 0:00.04 /usr/local/Apache/bin/httpd -k start -DSSL
678480 user 20 0 229m 17m 10m S 0.3 0.2 0:00.22 /usr/bin/php
678491 root 20 0 15148 1360 944 R 0.3 0.0 0:00.15 top -c
678519 user 20 0 233m 30m 20m D 0.3 0.4 0:00.22 /usr/bin/php
678538 user 20 0 234m 31m 20m D 0.3 0.4 0:00.18 /usr/bin/php
678567 user 20 0 230m 14m 8392 D 0.3 0.2 0:00.06 /usr/bin/php
678612 user 20 0 128m 6156 4392 D 0.3 0.1 0:00.01 /usr/bin/php
1 root 20 0 19356 1388 1064 S 0.0 0.0 0:00.89 /sbin/init
とittop
66913 be/4 user 1733.28 K/s 0.00 B/s 0.00 % 99.99 % php
66888 be/4 user 734.51 K/s 0.00 B/s 0.00 % 99.99 % php
66275 be/4 user 167.11 K/s 0.00 B/s 0.00 % 99.99 % php
66409 be/4 user 956.03 K/s 0.00 B/s 0.00 % 99.99 % php
66840 be/4 user 15.55 K/s 0.00 B/s 0.00 % 99.99 % php
66825 be/4 user 85.50 K/s 0.00 B/s 0.00 % 99.99 % php
66902 be/4 user 2028.64 K/s 0.00 B/s 0.00 % 99.99 % php
66268 be/4 user 932.71 K/s 0.00 B/s 0.00 % 99.95 % php
66805 be/4 user 489.67 K/s 0.00 B/s 0.00 % 93.08 % php
これはランダムにスパイクするものです。
アイデア?
質問ありがとうございます。
使用しているハードウェアに関する詳細情報があると便利です。
これには、サーバーのメーカー/モデル、ディスクアレイのセットアップ(RAIDコントローラー、RAIDレベル、キャッシュソリューション、ディスクの数)、およびLinuxディストリビューションとカーネルの詳細が含まれます。
上記のデータダンプを見ると、I/Oが不足している、またはリソースを待機している書き込みアクティビティから待機していると思われます。これは、ディスクアレイに使用可能な書き込みキャッシュがない場合に発生する可能性があります。それはまた、負荷の激しい変動の原因となる可能性があります。
iostat や collectl のようなツールの出力は、何が起こっているのかを理解するのに役立ちます。
iostat -x 1
またはcollectl -sD
を試して、結果を投稿してください。