我试图确认我的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
减less(在这种情况下,内核可能只是使用空闲内存来caching)?
有没有办法知道你是否有内存泄漏。 你可以根据你对系统和程序的了解来设想它。 我会检查文件/proc/meminfo
,采取MemFree
的价值,并在一段时间内检查它。 如果它总是减less,经过一段时间后,我应该断言存在内存泄漏。
cat /proc/meminfo | gawk '{if (/MemFree/ ~ $0) print $2}'
但据我所知,没有办法检查“全局”内存泄漏。 等待其他答案;)
用户空间进程的内存泄漏将导致此进程使用的内存量不断增长。
你可以在批处理模式下使用top来监视进程(但是,顶层似乎不支持在批处理模式下按内存sorting, https://bugzilla.redhat.com/show_bug.cgi?id=547749 )
作为顶层的替代scheme,您也可以每分钟执行一次以下命令:
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,而没有活动或input数据,那么可能是内存泄漏(例如,如果启动Web浏览器并在不使用它的情况下运行,则Web的内存使用情况浏览器显然不应该随着时间而长大)。