讨论:内存是否泄露如何认定?

大家在实际工作中,什么情况下会怀疑内存有泄露,如何判断和定位?显示全部

大家在实际工作中,什么情况下会怀疑内存有泄露,如何判断和定位?

收起
参与24

查看其它 4 个回答yangjianxv的回答

yangjianxvyangjianxv部门总经理成方金融科技有限公司

内存泄露指进程自己申请分配、使用了内存但没有在使用完毕后释放,大量的泄露会导致物理内存用满,降低系统效率。

如何判断一个进程有没有内存泄露?

1)看进程的数据段

AIX中使用ps gv命令观察特定进程的SIZE指标,如果SIZE经过长时间测试后,不断增长,则可能有内存泄露的嫌疑,这里说的是嫌疑,而不是一定。况且,查看进程的SIZE值也只能查看这个进程使用的一部分内存,而这个进程使用的Shared Memory Segment则不在这个指标中。如果是JAVA程序由于涉及到JVM的内存管理,问题就更难判断的,我们先放下JAVA程序不表,单说C的程序。

ps gv命令中SIZE就是该进程数据段的virtual size(1KB为单位),这些分页可能在物理内存中也可能在Paging Space中。检查SIZE列在长期的测试过程中是否有明显的持续增长,如有,说明可能有内存泄露。长期的抓取和后期的图形化处理,可以写脚本或代码来实现。

其他命令也可以看到这个值,“svmon –P 进程号”可以看work process private的virtual大小+work shared library data的virtual大小。如果有text data BSS heap、USLA heap、application stack、private load data等segment,还需把这些segment也加上。由于svmon中统计的segment较多,因此不推荐采用svmon统计Data Segment。

2)进程的共享内存段

由于内存泄露问题非常复杂,可以参考我的文章:

性能指标之资源指标 如何判断是否有内存泄漏及关注的指标

性能指标之资源指标-内存-结合案例介绍JVM内存管理机制

银行 · 2017-03-10
浏览3282

回答者

yangjianxv
部门总经理成方金融科技有限公司
擅长领域: 服务器中间件数据库

yangjianxv 最近回答过的问题

回答状态

  • 发布时间:2017-03-10
  • 关注会员:5 人
  • 回答浏览:3282
  • X社区推广