确定是什么导致高磁盘IO

我的VPS和磁盘IO有问题。 我的服务器正在运行nginx + PHP-FPM + APC。 数据库位于另一个专用VPS上。 我有几个WordPress的MU网站生活在networking服务器上。 平均IO速率是6k块/秒。

我试图了解是什么导致高IO。

“free -m”的输出:

total used free shared buffers cached Mem: 1005 973 31 0 96 568 -/+ buffers/cache: 307 697 Swap: 255 8 247 

iotop”的输出:

 Total DISK READ: 0.00 B/s | Total DISK WRITE: 3.90 M/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 2150 be/4 root 0.00 B/s 0.00 B/s 0.00 % 65.25 % [flush-202:0] 6694 be/4 www-data 0.00 B/s 19.64 K/s 0.00 % 0.00 % php-fpm: pool www 6700 be/4 www-data 0.00 B/s 23.56 K/s 0.00 % 0.00 % php-fpm: pool www 8646 be/4 www-data 0.00 B/s 424.12 K/s 0.00 % 0.00 % php-fpm: pool www 10974 be/4 www-data 0.00 B/s 19.64 K/s 0.00 % 0.00 % php-fpm: pool www 

“flush-202:0”进程有时会触发99%的IO。 我读过这是磁盘caching刷新过程,但不明白是什么导致它运行/如何解决它。

任何帮助,将不胜感激。

谢谢

我不确定iotop示例显示了一些不寻常的东西。 如果在那个时候没有太多的I / O,冲洗过程在任何时候都是你I / O的高比例,这不是问题。 我会安装在顶层 ,它可以呈现像iotop这样的实时数据,但是也具有全天logging样本的优点。 安装完一天后,我会用atop -r log_filename打开logging的数据,然后用t读取样本,直到find系统级输出中报告的I / O为高的时间。 然后,我会切换每个进程输出到磁盘与D ,看看哪些进程正在产生的I / O活动。

[最可能迟到帮助OP,但为后代回答]

这可能是APC的一个问题。

如果它适合你,在你的PHPconfiguration,设置:

 apc.mmap_file_mask = /tmp/apc.shm.XXXXXX 

如果这样做不起作用,请删除apc.mmap_file_mask设置。

如果不是APC,那么它是使用磁盘备份caching的其他东西。 像虚拟内存一样,或清漆caching,或者使用DBM文件的东西。 那里有很多可能性 甚至可能是数据库引擎。

编辑:APC的用户现在可能应该迁移到Zend的opcache,后来随PHP的免费发行(和我记得早先支付的)。 查看opcache的调优对于pipe理IO负载可能仍然很重要。 https://www.sitepoint.com/understanding-opcache/是一个有用的介绍,并链接到几个工具,可用于检查您的caching性能(特别是命中率)。

这听起来像你的答案可以在这里find:

限制linux后台刷新(脏页)

你可以用pidstat程序实现这个function。 有些发行版没有安装它。 但是你可以从这里下载sysstate包并编译它。 不要安装它,但复制它编译的pidstat(或只是在当前目录中运行它)。 你可以传递'-d'标志来获得你想要的输出。