免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1973 | 回复: 0
打印 上一主题 下一主题

[学习求职] 学习“内存泄露”的一些心得 [复制链接]

论坛徽章:
2
丑牛
日期:2013-09-29 09:47:222015七夕节徽章
日期:2015-08-21 11:06:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-11 22:18 |只看该作者 |倒序浏览
好久没写东西了,今天就把不久前研究“内存泄露”的一些心得写出来。
    前几天,公司的一台AIX SERVER(跑DB2)挂了,通过errpt和alog可以看到故障是paging space耗光所引起的,所以开始了“内存泄露”的学习。
    在IBM网站上找到几篇文章,先看这个
article1
    这篇文章的标题虽然是“Memory Leaks”,但仔细看了内容,发现其实有点文不对题——本文是说引起system hang的三个原因:1、paging space设置不合理——比如设得太小,造成系统挂起;2、内存泄露——这个无论real memory和paging space有多大,早晚会造成系统挂起;3、系统达到了每用户最大进程数——这个能否造成系统挂起,我目前持怀疑的态度。
    回到我公司自己的机器上,既然errpt已经报了“paging space耗光”,那查问题就从上面的前两个原因开始着手。
    paging space该如何合理设置,应该看看AIX的入门书就可以了。我的BLOG里也有一篇文章
http://blog.chinaunix.net/article.php?articleId=44426&blogId=739
,这个不多说了。
    至于是否有内存泄露,这个还真不好立刻下定论。不过,IBM网站上有文章,
aticle2
    这篇文章提供了个判断系统是否有内存泄露“疑似”进程的脚本,使用方法就在文件Readme_vg中:
How To:  Use post_vg.sh
1)  Issue the following command
# ps vg > ps.before
2)  Wait some period of time -- perhaps 30 minutes and issue the command again.
# ps vg > ps.after
3)  Now, post process the two files
# ./post_vg ps.before ps.after
Note:  The scrīpt assumes that before is the first file.
The 'Delta' indicates a change in the process SIZE.  One reason for an
increasaed SIZE value is a memory leak.  For more information about
detecting memory leaks review the paper Methods for Identifying Memory
Leaks in AIX Systems.
    结合crontab定期收集数据和awk等工具过滤post_vg的输出结果,很容易发现哪些是可疑进程。
    但这些可疑进程是否真的有内存泄露呢?还需要进一步判断。判断的依据就是Readme_vg中提到的paper——“Methods for Identifying Memory Leaks in AIX Systems”。这个还是在IBM网站上:
article3
    这第三篇文章看个大概就可以了,作为系统管理员不必要“深陷”其中。下面直接说说我调查出来的自己机器paging space耗光的原因:是DB2的一个参数NUM_POOLAGENTS设置得太大,系统中有大量的db2agent(idle)进程。这个idle意味着代理db2agent虽然是空闲的,但在"connect reset"后仍然分配在缓冲池中,占用了大量的内存,最终real memory占满了,paging space也耗光了,系统就挂了。
    这样研究了一圈,我发现解决“内存泄露”问题其实不用这么麻烦,直接去看应用厂家的Recommended minimum AIX maintenance就好了。具体到DB2,就是看这里:
http://www-1.ibm.com/support/docview.wss?rs=71&context=SSEPGG&q1=memory+leak&q2=5.2&uid=swg21165448&loc=en_US&cs=utf-8&lang=en
。原因很简单了,要解决“内存泄露”问题,肯定要从应用本身入手;如果厂家都不提供解决方案,就算你发现了“内存泄露”也无计可施。
    最后总结一下:
    1、引起系统挂起,按照IBM网站的第一篇文章的说法,有两种原因:paging space耗光,或者系统达到了每用户最大进程数(再次声明,我还是不太相信maxuproc会引起系统挂起)。
    2、造成paging space耗光,应该有三个原因:
    (1)paging space设置不合理
    (2)应用有内存泄露
    (3)应用自身的设置有问题——我认为从整个系统调优的角度来看,应用自身的设置优化比硬件升级和操作系统优化(这里插一句,前一段时间看了看VMM方面的东西,感觉AIX其实是很智能的,几乎不需要人为的优化设置)更容易见成效。
    3、查看厂家的Recommended minimum AIX maintenance,其实是解决类似问题最简单的方法。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/4206/showart_684758.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP