高磁盘缓存使用率是否会导致外部碎片并最终导致页面分配失败?

高磁盘缓存使用率是否会导致外部碎片并最终导致页面分配失败?

我们在 Linux 服务器(3.2 内核)上遇到了页面分配失败。我们被告知该问题与缓存内存使用率过高直接相关;这会导致外部碎片,并最终导致页面分配错误。以下是 top 输出的摘录:

top - 10:45:09 up 3 days, 17:10,  0 users,  load average: 1.00, 0.97, 1.08
Tasks: 313 total,   3 running, 310 sleeping,   0 stopped,   0 zombie
Cpu(s):  7.9%us,  1.2%sy,  0.0%ni, 89.8%id,  0.2%wa,  0.0%hi,  0.9%si,  0.0%st
Mem:   8174056k total,  7948312k used,   225744k free,   278412k buffers
Swap:  2072348k total,      180k used,  2072168k free,  4676676k cached

我们被告知通过定期释放缓存可以缓解此问题:

echo 3 > /proc/sys/vm/drop_caches

有人告诉我,为了彻底解决问题,必须减少缓存使用量。但我不愿意相信缓存会导致页面分配错误。我理解分配给磁盘缓存的内存基本上是空闲内存(根据http://www.linuxatemyram.com) 和缓存的高内存使用率实际上是一个好兆头。当然,这会导致外部碎片,但内核是否会无法回收这个空间以满足例如 4 阶分配请求?示例程序可在http://www.linuxatemyram.com表明应用程序在这种情况下分配内存没有问题,但如果内核需要分配相同数量的内存,情况会有什么不同吗?

答案1

Linux 将使用未使用的 RAM 进行磁盘缓存,这是众所周知的,正如您所说。但是,如果您的应用程序在短时间内同时使用大量 RAM,则可能没有足够的可用内存,系统无法足够快地转储磁盘缓存,从而导致您描述的故障。

关键是首先解决页面分配失败问题。如果可以的话,增加更多 RAM 肯定会有所帮助,增加交换空间(通常我看到大多数应用程序的交换空间=RAM)也可以处理峰值。这个问题还详细说明了您可以进行的一些内核调整。

相关内容