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内存管理机制导致的内存增长,不过程序内存增长到一定程度后稳定倒不影响业务。
另外比较诡异的是不同的程序,内存增长的程度不一样,这点没有深究。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!