我们有一个有点复杂的 LAMP 堆栈,在 Centos 5 上使用 Litespeed 而不是 Apache 运行各种网站。
一旦一切启动并运行,系统的内存使用情况就相当一致 - 大部分内存被 MySQL 的缓存占用,剩余部分用于 Litespeed(webserver 和 lsphp5)和与操作系统相关的操作。
每隔一段时间,我们就会发现进程消耗的内存大幅减少(如下面屏幕截图中大约是凌晨 3:55 和上午 9:25)。
一切都继续正常运转——事实上,性能增加。我检查了 OOM 终止程序,没有看到任何进程被终止,MySQL 的缓存出现保持完整(例如 MyISAM 或 InnoDB 命中率没有偏差)。
所以,我的问题是,“我们如何确定正在释放哪些内存(例如它属于哪些进程)?”
请注意,如果我们可以追溯性地进行此分析(例如,基于历史数据),那就再好不过了。不过,我也很高兴能找到一个可以实施的解决方案来跟踪未来的内存使用情况。
答案1
您可以尝试使用smem
. 如果没有为您的操作系统预先打包,编译和使用应该相当简单。
您可以使用该实用程序收集每个进程的统计信息smemcap
并在其他地方处理它们,或者通过解析数据直接报告给您的监控解决方案。
还有普通的 SNMP。主机资源MIB有一张可能有用的表格。
hrSWRunPerfMem OBJECT-TYPE
SYNTAX KBytes
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The total amount of real system memory allocated
to this process."
::= { hrSWRunPerfEntry 2 }
然而,处理提供的数据时,困难之处在于相关性。
查看这例如使用zabbix
。