表现症状如下:
1、鲲鹏920,系统Kylin Linux Advanced Server V10 (Sword)
2、一个计算节点程序(c++),每跑一次内存都会膨胀,TOP中M可以明显看到,完全符合内存泄露的特征。
3、使用valgrind分析,报告显示不存在内存泄露。
4、使用tcmalloc,当回收比率参数设置较低时,整体症状不明显,但依然是增加趋势。
5、同样的程序在x86架构centos下不存在问题,TOP中可以明显看到随着单次计算结束,内存会下降接近0。
程序使用内存的特征如下:
1、为防止内存碎片,大量分配销毁的内存都是PAGESIZE(64K)整页大小。
2、因为需要计算大量数据,中间产生的数据太大时,会缓存磁盘,此时依然是以PAGESIZE整页写入,使用时也是mmap整页映射出来。
3、步骤2的文件描述符正常释放,因为运算完成后,所有中间缓存文件都会被清理掉。
推测结论如下:
1、麒麟系统的glibc库存在bug,PAGESIZE整页内存释放不能正确归还系统。
2、麒麟系统存在某些配置参数,程序释放的内存并不是立即归还系统。
以上,结论的依据是使用tcmalloc的对比表现,当tcmalloc设置参数不归还/少归还系统时,整体内存维持在一个最高水位不下降。当不使用tcmalloc时,特别明显的是一次次膨胀。
以上,暂无解决办法,有没有同学也遇到过这样的问题,欢迎讨论,我的邮箱是lylone$hotmail.com
表现症状如下:
1、鲲鹏920,系统Kylin Linux Advanced Server V10 (Sword)
2、一个计算节点程序(c++),每跑一次内存都会膨胀,TOP中M可以明显看到,完全符合内存泄露的特征。
3、使用valgrind分析,报告显示不存在内存泄露。
4、使用tcmalloc,当回收比率参数设置较低时,整体症状不明显,但依然是增加趋势。
5、同样的程序在x86架构centos下不存在问题,TOP中可以明显看到随着单次计算结束,内存会下降接近0。
程序使用内存的特征如下:
1、为防止内存碎片,大量分配销毁的内存都是PAGESIZE(64K)整页大小。
2、因为需要计算大量数据,中间产生的数据太大时,会缓存磁盘,此时依然是以PAGESIZE整页写入,使用时也是mmap整页映射出来。
3、步骤2的文件描述符正常释放,因为运算完成后,所有中间缓存文件都会被清理掉。
推测结论如下:
1、麒麟系统的glibc库存在bug,PAGESIZE整页内存释放不能正确归还系统。
2、麒麟系统存在某些配置参数,程序释放的内存并不是立即归还系统。
以上,结论的依据是使用tcmalloc的对比表现,当tcmalloc设置参数不归还/少归还系统时,整体内存维持在一个最高水位不下降。当不使用tcmalloc时,特别明显的是一次次膨胀。
以上,暂无解决办法,有没有同学也遇到过这样的问题,欢迎讨论,我的邮箱是lylone$hotmail.com