我正在尝试确认我的 Linux 设备在空闲状态下是否存在内存泄漏(不应有持续的内存消耗)。我并不想知道导致泄漏的进程,只是想确定内存泄漏的结论。
我将其用作top
诊断工具。内存字段示例从顶部开始:
Mem: 118616k total, 83980k used, 34636k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 24140k cached
我可以看到不断下降的价值,但是,也可以看到不断增加free
的价值。cached
为了确认存在内存泄漏,总和free+cached
应该持续下降而不是仅仅free
减少(在这种情况下内核可能只是使用可用内存进行缓存)?
答案1
没有办法知道您是否有内存泄漏。您可以根据对系统和程序的了解来假设它。我会检查文件/proc/meminfo
,获取值MemFree
并在某些时间间隔内检查它。如果它总是在减少,那么在经过一些间隔后,我应该断言存在内存泄漏。
cat /proc/meminfo | gawk '{if (/MemFree/ ~ $0) print $2}'
但据我所知,没有办法检查“全局”内存泄漏。等待其他答案;)
答案2
用户空间进程的内存泄漏会导致这个流程。
你可以使用批处理模式下的 top 来监视进程(但是,top 似乎不支持批处理模式下按内存排序,https://bugzilla.redhat.com/show_bug.cgi?id=547749)
作为 top 的替代,您也可以每分钟执行以下命令:
ps aux --sort -rss | head -n 10
查看使用 RAM 的前 10 个进程。
例如
while [ true ]; do ps aux --sort -rss | head -n 10 >> memory_usage_log.txt; echo "#########" >> memory_usage_log.txt; sleep 60; done;
如果某个进程随着时间的推移使用越来越多的 RAM,而没有活动或输入数据,那么它可能是一个内存泄漏(例如,如果你启动一个网络浏览器并在不使用它的情况下保持它运行,那么网络浏览器的内存使用量显然不应该随着时间的推移而增长)。