【发布时间】:2012-08-24 02:58:29
【问题描述】:
我一直在嵌入式 Linux 系统上运行通宵内存测试。使用 vmstat 我观察到可用内存随着时间的推移稳步减少。根据 procfs 中的一些 smaps 分析,一个进程的堆以大致相同的速度增长。我怀疑存在内存泄漏,并在代码中发现了一些经常使用new 和delete 的地方。但是,我没有看到没有匹配 delete 调用的 new 调用。
我再次运行内存测试,今天早上通过以下调用清除了内存缓存
echo 3 > /proc/sys/vm/drop_caches
vmstat 中列出的可用内存下降到接近开始测试时的值。
内核是否定期回收未使用的堆页面?如果是这样,除了上述之外,还有其他时间这样做吗?可能是当空闲内存低于某个阈值时?
【问题讨论】:
-
未使用的内存是浪费的内存,所以linux使用内存,直到其他人想使用它。
-
你说的是内核堆还是这个明显泄漏的进程使用的堆?
-
@Tom:我说的是用户空间进程的堆
-
您能澄清一下您在说什么“空闲内存”吗?系统中有可用的物理 RAM?还是特定进程中未使用的虚拟地址空间?
标签: c++ linux memory-management memory-leaks heap-memory