向磁盘写入大量数据后是否可以获得更高的内存缓冲/缓存使用率?

向磁盘写入大量数据后是否可以获得更高的内存缓冲/缓存使用率?

在我自己的 Apache 服务器上,已使用自定义 Apache 模块启用将请求记录到文件。

一天结束时,日志文件可能达到数 GB。使用 Nagios 我注意到内存使用量比平常高(可用内存减少了 4-5 GB),主要是因为缓存的内存(例如使用命令在 buff/cache 中报告的内容free -m)。

在此输入图像描述

  • 19:日志禁用
  • 20:日志启用
  • 21:启用日志+更多VM内存

目前尚不清楚为什么确实如此,但我希望 Linux 暂时将写入磁盘的内容保留在内存中,以防以后需要再次读取。

这是否有意义,或者该缓存主要用于从磁盘读取的内容(而不是写入的内容)?

我不认为 Apache 模块存在内存泄漏,因为一旦连接关闭,它分配的内容就会自动清理(一种可能性是有大量 TCP/IP 延迟连接)并且(AFAIK)因此它不会出现在缓存内存中。

答案1

我希望 Linux 将写入磁盘的内容暂时保存在内存中,以备稍后需要再次读取。

这是正确的,这就是您在这里看到的。写入磁盘的数据在短时间内被再次读取(通常是由另一个进程)是很常见的,缓存既用于从磁盘读取数据,也用于写入磁盘的数据。

一般来说,空闲内存是浪费内存;用它来缓存数据效果更好。

答案2

回答我自己的问题:是的,这是可能的。

以下命令清除缓存,然后将随机数据写入文件:

sysctl -w vm.drop_caches=3          ; drop memory cache   
free -m                             ; check memory
head -c 1G </dev/urandom >myfile    ; create a 1G random file
free -m                             ; check memory

结果如下:

              Before : free: 474  cache: 143  avail: 450
After (100M written) : free: 371  cache: 246  avail: 428
After (  1G written) : free:  72  cache: 543  avail: 414 

写入磁盘的数据越多,越大缓存变成,同时自由的记忆力下降。有用内存或多或少保持不变(如预期)。

相关内容