鲲鹏麒麟系统一个古怪的“内存泄露”问题,是系统BUG还是系统参数没配置对?
收藏回复举报
鲲鹏麒麟系统一个古怪的“内存泄露”问题,是系统BUG还是系统参数没配置对?
t('forum.solved') 已解决
新人帖
发表于2023-11-01 15:26:51
0 查看

表现症状如下:

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

本帖最后由 匿名用户2023/11/20 14:46:34 编辑

我要发帖子