Linux
在 linux 伺服器上調試 I/O 問題
有哪些方法可以在 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
發布結果。