Linux程序内存释放不回收问题

最近在测试一个程序,内存表现很诡异,记录一下。

测试环境:vmware虚拟机,操作系统:ubuntu 16.04 x64

程序中有一段业务需要申请大块内存,业务完成后再释放掉。

测试表现:程序启动占用内存约90M,执行一次业务后,内存增长约200M,且不回落,这样约5次后,内存增长到约1G后趋于稳定。

开始感觉有内存泄漏,使用valgrind工具检测没有找到异常点,又仔细检查了几遍代码,确认申请的内存已经释放(释放处增加日志输出可以证实执行)。

后来怀疑是操作系统原因,但是苦于没有证据。最后找到这篇文章:https://blog.csdn.net/kelsel/article/details/52758277

为了验证是glibc内存管理机制导致的,在程序中做了两次验证:

1,使用mallopt函数设置阀值,结果测试没有效果;

2,使用malloc_trim(0)函数强制释放空余空间,测试效果是每次业务之后,内存可以降到105M左右,并且长时间测试(大于4小时)内存表现一致。

所以证实是linux内存管理机制导致的内存增长,不过程序内存增长到一定程度后稳定倒不影响业务。

另外比较诡异的是不同的程序,内存增长的程度不一样,这点没有深究。

posted @ 2023-04-13 18:47  strongbug1  阅读(525)  评论(0编辑  收藏  举报