Chinaunix首页 | 论坛 | 博客
  • 博客访问: 593578
  • 博文数量: 226
  • 博客积分: 10080
  • 博客等级: 上将
  • 技术积分: 1725
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-26 11:15
文章分类

全部博文(226)

文章存档

2011年(5)

2010年(64)

2009年(99)

2008年(37)

2007年(21)

我的朋友

分类: LINUX

2009-03-28 18:38:30

       内存泄露是c语言永恒的话题,同样是从书上看到了内存泄露检查方法,堆常出现两种类型的问题:
  • 释放或改写仍在使用的内存(“内存损坏”)
  • 未释放不在使用的内存(“内存泄露”)
主要症状:罪魁进程速度会愈来愈慢;原因体积大的进程更有可能被系统换出,让别的进程运行,而且大体积的进程在换入换出的时候花费的时间更多。即使泄露的内存未被使用但是它仍可能存在页面中,
增加了工作页的数量,降低了性能。另外注意泄露的内存要比申请的数据结构要大,因为malloc所分配的内存统称会圆整为下一个大于申请数量的2的整数此方(比如申请212B会被圆整为256B)。从理论上讲,进程大小有个固定值,即使内存未达到这个数量,磁盘的交互区已经消耗殆尽了。


检测方法:
  1.  用命令查询swap使用情况,在一分钟内部键入该命令3-4次,看看交换区是否在减少,还可以使用其他工具,比如netstat ,vmstat。如果发现内存不断有内存被分配且从不释放,可能就是内存泄露。
  2. 确定可疑进程,可以用过命令”ps -lu 用户名“ 查看进程的大小,标题为SZ的列标示进程的大小(如果想用KB标示页面的大小可以用pagesize命令)。重复多次这个命令,如果发现任何动态分配内存的进程大小一直增长而没有缩小,就说明可能存在内存泄露。

命令提示:

 HP-UNIX 下查看swap使用:
 swapinfo -at 输出如下:


$ swapinfo -at
             Kb      Kb      Kb   PCT  START/      Kb
TYPE      AVAIL    USED    FREE  USED   LIMIT RESERVE  PRI  NAME
dev     33554432       0  33554432    0%       0       -    1  /dev/vg00/lvol2
dev     33554432       0  33554432    0%       0       -    1  /dev/vg00/swap2
reserve       -  35817644  -35817644
memory  78162140 23476020 54686120   30%
total   145271004 59293664 85977340   41%       -       0    -

具体解释,自己可以man下,反正我自己也不太理解。

$ ps -lu olcom
  F S        UID   PID  PPID  C PRI NI             ADDR   SZ            WCHAN TTY       TIME COMD
  1 R        109 12945 12944  1 152 20        1ff855040 1218                - ?         0:12 xx-ls
  1 S        109 12338     1  0 158 20        21f950e40  468        166c33040 ?         0:00 xx-c
  1 R        109 18168 18167  0 152 20        171323200 1224                - ?         2:02 xx-l
  1 S        109  2698     1  0 158 20        21ecbf4c0  433        16c139040 ?         0:00 xx-cd
  1 R        109 12339 12338  0 152 20        1cafbc980 1976                - ?         6:17 xx-c
  1 S        109 26219     1  0 158 20        16d052180  354        16dbb0040 ?         0:00 xx-cd
  1 S        109 12944     1  0 158 20        21c817300  422        16df37040 ?         0:00 brsAps-ls
-----------------------------------------------------------------------------
AIX 命令:

topas
/usr/sbin/swap -s





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