一次伪内存泄露

背景

压测发现,机器人关闭后,内存没有减下来,初步判断是内存泄露

内存泄露排查 - Review 代码

包括

  • static 静态变量
  • extern 全局变量
  • 单例中的容器字段

没有发现异常的地方

内存泄露排查 - 使用 gperftools dump 内存分布情况

gperftools 相关知识可以参考: https://github.com/fananchong/gperftools_sample

使用过程如下:

  • 登录几百个机器人后
  • dump 一次
  • 全部登出
  • 再 dump 一次

第一次 dump 出来,结果如下:

在这里插入图片描述
第二次的 dump ,结果如下:

在这里插入图片描述
500 机器人登录后,内存涨到 12.9 M , 全部登出,内存回到 0.8 M

与压测时的监视曲线完全不符

因此,判断可能不是内存泄露,排查方向错了

内存泄露排查 - 了解内存管理器运作机制

于是百度搜了下诸如: glibc 内存管理tcmalloc 内存管理

会发现,也有人遇到相同情况:

才发现是内存管理器在作怪

总结

判断是否内存泄露,除了文中所说的:

  • Review 代码
  • 使用内存检查工具

这些比较耗时的工作量外

通常,可以初略的观察下内存占用曲线,就可以大致判断

比如,内存占用曲线是这种模样的,阶梯型的,一定是内存泄露:

                                         +-------------------------------------+ 4G
                                         |
                                         |
                                         |
                   +---------------------+
                   |
                   |
                   |
                   |
1G +---------------+

再如,内存占用曲线是这种模样的,回归某水平线型的:

                                         +------------+  4G
                                         |            |
                                         |            |
                                         |            |
                   +---------------------+            |
                   |                                  |
                   |                                  |
                   |                                  +---------------------+
                   |                                                        |
1G +---------------+                                                        +--------------------+ 1G

虽然也是有 1G 内存未释放,通常需要做进一步排查,切勿轻言一定未内存泄露

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fananchong2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值