几天前,我注意到磁盘I/O等待和磁盘活动下降(这很棒)。然后,我还注意到我的缓存是满的(*)和碎片。然后我刷新了缓存。之后,磁盘延迟和磁盘活动跳到了以前的水平(这很糟糕)。
IOtop显示,jbd2 2/sda2 2-8和冲水-8:00总是位于磁盘使用的顶端。这是一个戴尔R210,硬件RAID 1 (H200),有大量的空闲内存(总共16 GB,其中大约8 GB是缓冲区/缓存)。
(*)缓存是用于PHP的APC操作码缓存,这减少了对PHP脚本执行的磁盘访问。高速缓存是完整的和支离破碎的,因为它包含了来自开发实例的文件。当我注意到这一点时,我把它们过滤掉了。
问题是:为什么磁盘I/O在理论上应该减少时会增加?下面是穆宁的一些图表。2月6日至8日缓存已满。



在我按@赛博86的方式注释掉apc.mmap_file_mask后的更改


发布于 2012-02-17 12:18:18
如果使用文件支持的内存映射(例如apc.mmap_file_mask=/tmp/apc.XXXXXX),则可能会看到I/O的升高。
尝试将apc.mmap_file_mask设置为使用共享内存(例如/apc.shm.XXXXXX)或将其设置为/dev/zero (匿名内存)。将设置未定义的默认值保留为使用匿名内存。
通常,mmapped文件是一件很棒的事情:
然而,与纯粹在内存中存储一些东西相比,它们确实会产生额外的I/O --因此,当文件不断更改时,就会产生额外的I/O。不使用your文件的缺点是缺乏持久性--您的缓存将无法在重新启动后存活下来,因为它只存储在内存中。
因此,有人可能认为,当缓存正在填充和稳定时,它正在经历最大的变化,必须不断地写入磁盘;一旦缓存满了,每个对象的ttl就会减慢缓存中数据的翻转速率,从而减少更改和减少磁盘写入。
发布于 2012-02-21 10:33:20
几天后,我想带些图表回来。这一变化大大改善了这种情况。它减少了所有的东西,除了IO服务时间(我认为这是因为不再有简单的小型PHP文件读取,这是很便宜的)。




服务器负载(已经很低了,所以我还没有发现更改)。

https://serverfault.com/questions/361032
复制相似问题