在我自己的 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
写入磁盘的数据越多,越大缓存变成,同时自由的记忆力下降。有用内存或多或少保持不变(如预期)。