glibc 2.17 引发的‘‘内存泄漏现象‘‘

前几天在定位一个很奇怪的"内存泄漏"问题。我们的服务在arm下面跑到好好的,但是在x86下面的环境下面内存运行时间久了就上涨。用vargrind工具检查内存,也没发现什么问题,说明我们的代码方面应该试ok的。

对比一下两套环境的不同,发现libc和libstdc++的版本不同,所以就怀疑应该试这版本上的差异导致内存管理上的不同表现。

经过测试数据的对比,如果将libc 升级到高版本 比如2.28 运行期间内存表现就会很稳定。原因在于,高版本的libc 的 freee 会定期调用 systrim ,将内存还给操作系统。

其实这是一个 Free/Delete Not Returning Memory To OS 问题,可以参考学习

使用jemalloc解决内存碎片问题

内存优化总结:ptmalloc、tcmalloc和jemalloc

参考
【春节红包系列】一次"内存泄漏"引发的血案

malloc_trim(3) — Linux manual page

glibc application holding onto unused memory until just before exit

你可能感兴趣的:(Linux,c++,c++)