最近在测试一个程序,内存表现很诡异,记录一下。
测试环境: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内存管理机制导致的内存增长,不过程序内存增长到一定程度后稳定倒不影响业务。
另外比较诡异的是不同的程序,内存增长的程度不一样,这点没有深究。
标签:释放,程序,业务,回收,内存,测试,Linux From: https://www.cnblogs.com/strongbug/p/17316028.html