在Linux服务器上debuggingI / O问题

有什么方法来debuggingLinux服务器上的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 Load Average。

我所有的箱子上都是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 

这就是随机的秒杀。

想法?

谢谢你的问题。

有关您正在使用的硬件的详细信息将是有帮助的。

其中包括服务器型号/型号,磁盘arrays设置(RAID控制器,RAID级别,caching解决scheme,磁盘数量)以及您的Linux发行版和内核的详细信息。

看看上面的数据转储,我怀疑I / O等待写入活动是饿死或等待资源。 当磁盘arrays上没有可用的写入caching时,可能会发生这种情况。 这也可能是负荷大幅波动的原因。

像iostat或collectl这样的工具的输出将有助于理解发生的事情。

尝试iostat -x 1collectl -sD并发布结果。