jci*_*sio 9 performance hard-drive cache
几天前,我注意到磁盘 I/O 等待和磁盘活动下降(这很棒)。然后我还注意到我的缓存已满(*)并且碎片化。然后我刷新了缓存。在那之后,磁盘延迟和磁盘活动跳到了之前的水平(这很糟糕)。
IOtop 显示 [jbd2/sda2-8] 和 [flush-8:00] 始终处于磁盘使用率之上。这是一个 Dell R210,硬件 RAID 1 (H200),具有大量可用内存(总共 16 GB,其中大约 8 GB 是缓冲区/缓存)。
(*) 缓存是 PHP 的 APC 操作码缓存,它减少了 PHP 脚本执行的磁盘访问。缓存已满且碎片化,因为它包含来自开发实例的文件。当我注意到这一点时,我将它们过滤掉了。
问题是:为什么磁盘 I/O 在理论上应该减少时增加?以下是来自 munin 的一些图表。从 2 月 6 日到 8 日,缓存已满。
在我注释掉 @cyberx86 所说的 apc.mmap_file_mask 后更改
cyb*_*x86 10
如果您使用文件支持的内存映射(例如apc.mmap_file_mask=/tmp/apc.XXXXXX
),您可能会看到 I/O 提升。
尝试设置apc.mmap_file_mask
为使用共享内存(例如/apc.shm.XXXXXX
)或/dev/zero
(匿名映射内存)。保持设置未定义默认使用匿名 mmapped 内存。
通常,映射文件是一件好事:
然而,与纯粹在内存中存储一些东西相比,它们确实会增加 I/O——当文件不断变化时,相当多。不使用 mmapped 文件的缺点是缺乏持久性 - 您的缓存将无法重新启动,因为它仅存储在内存中。
因此,有人可能会认为,虽然缓存正在填满并稳定下来,但它正在经历最大的变化,必须不断地写入磁盘;一旦缓存已满,每个对象的 ttl 就会减慢缓存中数据的翻转速度,从而减少更改并减少磁盘写入。
归档时间: |
|
查看次数: |
5178 次 |
最近记录: |