以下是运行 CentOS 的 VPS 上的内存图,该 VPS 具有 512MB RAM 和 nginx/php-fpm/mysqld,每天为数千名访问者提供(大部分是静态)内容。
(这些是 x 轴上的天数)
正如你所看到的,它在缓存和缓冲区中是相当跳跃的。内存缓存会不定期地清除(排除负责任的 cron 作业)。它通常(但并非总是)会在其无法增长的时候被清除。有时它几乎完全清除,有时则只有一半。
我试图理解这些清洗背后的逻辑。我希望文件数据的缓存时间更长,并且当内存缓存被清除时,不会看到任何其他程序使用比平时更多的内存。
这是正常行为,还是我错过了什么?
更新:内存升级似乎稳定了图表。仍然出现小幅下降,但没有升级前那么显着。
答案1
可能有很多事情。也许您正在运行的程序之一偶尔会短暂地使用大量 RAM。如果 X 轴上的时间确实是几周,那么您应该以更高的分辨率进行采样(例如每分钟甚至每秒一次),以获取有关导致缓存被删除的原因的更多信息。 在那段时间的ps
输出top
(包括平均负载)也很有用。
答案2
一个可能的原因是文件不断增长,例如日志,当达到给定大小时,它会被删除、压缩或发送到其他地方。
在任何一种情况下,一旦原始文件被删除,它的缓存大小(如果操作系统中没有内存压力,可能是整个大小)就会从缓存中释放。