Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15175064
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类:

2008-05-11 22:18:37

好久没写东西了,今天就把不久前研究“内存泄露”的一些心得写出来。

    前几天,公司的一台AIX SERVER(跑DB2)挂了,通过errpt和alog可以看到故障是paging space耗光所引起的,所以开始了“内存泄露”的学习。


    在IBM网站上找到几篇文章,先看这个

    这篇文章的标题虽然是“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网站上有文章,    这篇文章提供了个判断系统是否有内存泄露“疑似”进程的脚本,使用方法就在文件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网站上:

    这第三篇文章看个大概就可以了,作为系统管理员不必要“深陷”其中。下面直接说说我调查出来的自己机器paging space耗光的原因:是DB2的一个参数NUM_POOLAGENTS设置得太大,系统中有大量的db2agent(idle)进程。这个idle意味着代理db2agent虽然是空闲的,但在"connect reset"后仍然分配在缓冲池中,占用了大量的内存,最终real memory占满了,paging space也耗光了,系统就挂了。


    这样研究了一圈,我发现解决“内存泄露”问题其实不用这么麻烦,直接去看应用厂家的Recommended minimum AIX maintenance就好了。具体到DB2,就是看这里: 。原因很简单了,要解决“内存泄露”问题,肯定要从应用本身入手;如果厂家都不提供解决方案,就算你发现了“内存泄露”也无计可施。

    最后总结一下:
    1、引起系统挂起,按照IBM网站的第一篇文章的说法,有两种原因:paging space耗光,或者系统达到了每用户最大进程数(再次声明,我还是不太相信maxuproc会引起系统挂起)。
    2、造成paging space耗光,应该有三个原因:
    (1)paging space设置不合理
    (2)应用有内存泄露
    (3)应用自身的设置有问题——我认为从整个系统调优的角度来看,应用自身的设置优化比硬件升级和操作系统优化(这里插一句,前一段时间看了看VMM方面的东西,感觉AIX其实是很智能的,几乎不需要人为的优化设置)更容易见成效。
    3、查看厂家的Recommended minimum AIX maintenance,其实是解决类似问题最简单的方法。

阅读(1697) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~