我们有一个复杂的LAMP堆栈,在Centos 5上运行各种使用Litespeed而不是Apache的网站。
一旦一切正常运行,系统的内存使用情况相当一致 – 大部分内存被MySQL的caching占用,其余部分用于Litespeed(webserver和lsphp5)以及与操作系统相关的操作。
每隔一段时间,我们都会遇到进程消耗的内存大量减less(下面截图中的凌晨3:55和9:25左右)。

一切都还在继续,事实上,性能提高了 。 我已经检查了OOM杀手,看不到任何被杀死的进程,并且MySQL的caching似乎保持不变(例如MyISAM或InnoDB命中率没有偏差)。
所以,我的问题是,“我们如何确定哪些内存正在被释放(例如它属于哪个进程)?”
请注意,如果我们可以追溯性地进行这种分析(例如,根据历史数据),这是理想的。 不过,我也很高兴find一个解决scheme,我们可以将其用于跟踪未来的内存使用情况。
你可以尝试使用smem 。 编译和使用应该相当简单,如果没有预先包装你的操作系统。
您可以使用smemcap实用程序收集每个进程的统计信息并在其他地方处理它们,或通过parsing数据直接向您的监视解决scheme报告。
还有普通的旧的SNMP。 HOST-RESOURCES-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检查这个例子。