高速caching使用时磁盘I / O高吗?

前几天我注意到一个磁盘I / O等待和磁盘活动下降(这是伟大的)。 然后我也注意到我的caching已满(*)和分段。 然后我刷新caching。 之后,磁盘延迟和磁盘活动跃升到先前的水平(这是糟糕的)。

IOtop显示[jbd2 / sda2-8]和[flush-8:00]总是在磁盘使用之上。 这是一款戴尔R210硬件RAID 1(H200),拥有大量的可用内存(总共16 GB,其中大约8 GB是缓冲区/caching)。

(*)caching是PHP的APC操作码caching,可以减lessPHP脚本执行的磁盘访问。 caching已满,因为它包含了来自开发实例的文件。 当我注意到的时候,我把它们滤掉了。

问题是:为什么磁盘I / O在理论上会增加? 以下是来自慕尼黑的一些图表。 caching从2月6日到8日已满。

在这里输入图像描述在这里输入图像描述APC缓存目前正常。

在我通过@ cyberx86告诉apc.mmap_file_mask后,改变

在这里输入图像描述在这里输入图像描述

几天后https://serverfault.com/a/362152/88934

如果使用文件支持的内存映射(例如apc.mmap_file_mask=/tmp/apc.XXXXXX ),则可能会看到提升的I / O。

尝试设置apc.mmap_file_mask以使用共享内存(例如/apc.shm.XXXXXX )或/dev/zero (匿名mmapped内存)。 保持设置未定义,默认使用匿名mmapped内存。

通常,mmapped文件是一件好事:

  • 与将内容完全存储在内存中相比,mmapped文件通常需要更less的内存
  • 与将文件保存到文件相比,mmapped文件需要更less的磁盘I / O(因为写入可以聚合在一起)。

但是,与纯粹存储内存的东西相比,它们会产生额外的I / O – 相当大的时候,文件不断变化。 不使用mmapped文件的缺点是缺乏持久性 – caching将无法在重新启动后存活,因为它只存储在内存中。

因此,有人可能会build议,虽然caching已经填满并稳定下来,但它正在经历最大的变化,必须不断写入磁盘; 一旦caching满了,每个对象的ttl减慢了caching中的数据被翻转的速度,减less了变化并减less了磁盘写入。

过了几天,现在我想回来一些图表。 这种改变大大改善了这种情况。 它减less了一切,除了IO服务时间(我认为这是因为不再有微不足道的小PHP文件读取便宜)。

在这里输入图像描述在这里输入图像描述在这里输入图像描述在这里输入图像描述

服务器负载(已经很低了,所以我没有发现这个变化)。

在这里输入图像描述