非常高的负载,显然是由pdflush造成的

我有一台运行CentOS 5的服务器,它会周期性地(每天几次)有巨大的负载高峰,整个服务器将停下来。 几分钟后,负载将降低,一切恢复正常。

怀疑它与I / O有关,也许是一个坏的磁盘,但由于磁盘使用硬件RAID,我不知道如何找出发生了什么问题(smartctl只是说“设备不支持SMART”)。

无论如何,我从top看到的是:

 top - 08:51:03 up 73 days, 7:45, 1 user, load average: 69.00, 58.31, 46.89 Tasks: 316 total, 2 running, 314 sleeping, 0 stopped, 0 zombie Cpu(s): 11.0%us, 1.3%sy, 0.0%ni, 15.2%id, 72.0%wa, 0.0%hi, 0.5%si, 0.0%st Mem: 8299364k total, 7998520k used, 300844k free, 15480k buffers Swap: 16779884k total, 4788k used, 16775096k free, 6547860k cached 

正如你所看到的,负载是非常高的。 而且vmstat显示:

 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ rb swpd free buff cache si so bi bo in cs us sy id wa st 24 16 5632 296080 23392 6317688 0 0 3 28 0 0 7 1 89 3 0 0 22 5632 292644 23600 6325372 0 0 69 18781 1985 2318 9 2 14 75 0 1 23 5656 299472 23756 6299140 0 0 44 18667 2075 3382 14 2 13 71 0 0 23 5656 304756 24152 6295696 0 0 88 17002 1880 1445 4 1 16 78 0 0 24 5656 296736 24488 6356564 0 0 60 17967 1841 990 2 1 20 76 0 0 21 5672 302248 24764 6388424 0 0 66 17216 1820 749 2 1 24 73 0 

这是真正的高“哇”价值,看起来对我来说。 另外, iotop给出:

 Total DISK READ: 77.37 K/s | Total DISK WRITE: 15.81 M/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 25647 be/4 apache 73.50 K/s 0.00 B/s 0.00 % 99.99 % httpd 24387 be/4 root 0.00 B/s 0.00 B/s 99.99 % 99.99 % [pdflush] 23813 be/4 root 0.00 B/s 0.00 B/s 0.00 % 99.99 % [pdflush] 25094 be/4 root 0.00 B/s 0.00 B/s 96.72 % 99.99 % [pdflush] 25093 be/4 root 0.00 B/s 0.00 B/s 99.99 % 99.99 % [pdflush] 25095 be/4 root 0.00 B/s 0.00 B/s 99.99 % 99.99 % [pdflush] 25091 be/4 root 0.00 B/s 0.00 B/s 0.00 % 99.99 % [pdflush] 24389 be/4 root 0.00 B/s 0.00 B/s 99.99 % 99.99 % [pdflush] 24563 be/4 root 0.00 B/s 0.00 B/s 99.99 % 99.99 % [pdflush] 24390 be/4 apache 0.00 B/s 23.21 K/s 96.71 % 99.99 % httpd 24148 be/4 apache 0.00 B/s 0.00 B/s 96.71 % 99.99 % httpd 24699 be/4 apache 0.00 B/s 0.00 B/s 99.99 % 99.99 % httpd 23973 be/4 apache 0.00 B/s 0.00 B/s 99.99 % 99.99 % httpd 24270 be/4 apache 0.00 B/s 0.00 B/s 99.99 % 99.99 % httpd 24298 be/4 apache 0.00 B/s 1918.82 K/s 96.71 % 99.02 % httpd 628 be/3 root 0.00 B/s 0.00 B/s 0.00 % 97.51 % [kjournald] 25092 be/4 root 0.00 B/s 0.00 B/s 0.00 % 96.72 % [pdflush] 24258 be/4 root 0.00 B/s 0.00 B/s 99.99 % 96.71 % [pdflush] 23814 be/4 root 0.00 B/s 0.00 B/s 0.00 % 96.71 % [pdflush] 24388 be/4 root 0.00 B/s 0.00 B/s 99.02 % 96.71 % [pdflush] 25545 be/4 apache 0.00 B/s 0.00 B/s 0.19 % 92.73 % httpd 25274 be/4 apache 0.00 B/s 0.00 B/s 0.00 % 92.38 % httpd 24801 be/4 apache 0.00 B/s 5.84 M/s 99.99 % 91.63 % httpd 25281 be/4 apache 0.00 B/s 5.75 M/s 0.00 % 91.33 % httpd 26115 be/4 apache 0.00 B/s 0.00 B/s 9.60 % 19.26 % httpd 25561 be/4 apache 0.00 B/s 3.87 K/s 0.00 % 9.66 % httpd 26035 be/4 apache 0.00 B/s 0.00 B/s 0.00 % 9.63 % httpd 

最后,我从sar -d 5 0得到以下内容sar -d 5 0

 Linux 2.6.18-308.1.1.el5PAE (ausbt.com.au) 23/08/12 08:55:45 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 08:55:50 dev8-0 877.25 103.79 29306.19 33.53 158.81 179.28 1.14 99.84 08:55:50 dev8-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 08:55:50 dev8-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 08:55:50 dev8-3 877.25 103.79 29306.19 33.53 158.81 179.28 1.14 99.84 

这只是最近刚刚发生的事情(至less我最近才注意到),服务器上没有任何变化,所以我怀疑可能是某种硬件故障,但我不确定从哪里开始寻找。

更新

感谢Mark Wagner的提示,我做了strace正在做MB / s I / O的进程,发现它正在写入名为“/ tmp / magick-XXXXXXX”的文件。 这里是`ls -l / tmp / magick-XX *'的输出:

 -rw------- 1 apache apache 1854881318400 Aug 20 04:26 /tmp/magick-XXrQahSe -rw------- 1 apache apache 1854881318400 Aug 20 04:26 /tmp/magick-XXTaXatz -rw------- 1 apache apache 1854881318400 Aug 20 04:26 /tmp/magick-XXtf25pe 

哇! 这些文件来自两天前,但也有今天的文件是相似的大小。 我的代码使用ImageMagickdynamic生成图像的缩略图,所以也许有一个损坏的图像导致ImageMagick吓坏了,并写入1.6TB的文件到/ tmp。

当我发现更多的时候,我会做一些更多的东西,并发布更新。 感谢大家迄今为止的提示。

评论转换为答案。

Apache PID 24801和25281是I / O最多的:5.84 M / s和5.75 M / s。 我使用iotop -o排除不进行I / O的进程。

我不知道你是否可以信任iotop,因为你不在内核级别兼容。

我和你在同一个内核(2.6.18),我不能让iotop -o甚至工作。它不显示我只有IO生产过程。