当前位置: 技术问答>linux和unix
请教一下通过ps aux命令查询内存泄露的问题
来源: 互联网 发布时间:2016-04-10
本文导语: 请叫一下,今天查询程序内存泄露的时候,采取先屏蔽所有代码,然后逐步增加代码的方式进行测试。 首先基本屏蔽所有代码的情况下,使用ps aux命令查询,大约10分钟时间 sz和RSS项的数据都不会变大。 然后逐步...
请叫一下,今天查询程序内存泄露的时候,采取先屏蔽所有代码,然后逐步增加代码的方式进行测试。
首先基本屏蔽所有代码的情况下,使用ps aux命令查询,大约10分钟时间 sz和RSS项的数据都不会变大。
然后逐步增加代码。发现增加到某个别人写的函数以后,大约程序会每3-4分钟,sz和RSS项就增大一点点,大约是11640 -》11716-》11760-》118XX这样,每次都变的一点点
但是又不是总会增加,而是过一段时间增加一点点。
让工友帮我查他提供给我的代码,他说查询的结果正常,他的接口不会内存泄露。
所以有点小郁闷了,不知道我查询泄露的这种方法是否正确,PS AUX的sz rss项能不能准确的反映问题。
首先基本屏蔽所有代码的情况下,使用ps aux命令查询,大约10分钟时间 sz和RSS项的数据都不会变大。
然后逐步增加代码。发现增加到某个别人写的函数以后,大约程序会每3-4分钟,sz和RSS项就增大一点点,大约是11640 -》11716-》11760-》118XX这样,每次都变的一点点
但是又不是总会增加,而是过一段时间增加一点点。
让工友帮我查他提供给我的代码,他说查询的结果正常,他的接口不会内存泄露。
所以有点小郁闷了,不知道我查询泄露的这种方法是否正确,PS AUX的sz rss项能不能准确的反映问题。
|
1: 使用top指令.
top指令是按cpu占用率排序的,如果想一次获得所有进程的快照,使用命令
top -n [最大进程数] -f 输出到文件,比如top -n 1000 -f topsnapshot.log
top指令输出内存的统计信息包括
Memory: 2614368K (2249100K) real, 5838616K (5264696K) virtual, 113028K free Page# 1/1
其中没有括号起来的是总数,括号括起来的部分是活动进程使用的内存数,free则是真实空闲的物理内存数.
进程信息的列包括
CPU TTY PID USERNAME PRI NI SIZE RES STATE TIME %WCPU %CPU COMMAND
和内存相关的只有SIZE和RES
SIZE:任务的代码加上数据再加上栈空间的大小。
RES:任务使用的物理内存的总数量
要检查进程是否有内存泄露,和实际占用的内存大小,看RES列即可.
2:检查共享内存占用的内存容量
使用ipcs -m -b命令,-m表示检查共享内存,-b表示输出每个内存的字节数,得到的共享内存信息输出列包括:
T ID KEY MODE OWNER GROUP SEGSZ
SEGSZ列则是字节数.把每列相加则是共享内存占用的内存总数.
top指令是按cpu占用率排序的,如果想一次获得所有进程的快照,使用命令
top -n [最大进程数] -f 输出到文件,比如top -n 1000 -f topsnapshot.log
top指令输出内存的统计信息包括
Memory: 2614368K (2249100K) real, 5838616K (5264696K) virtual, 113028K free Page# 1/1
其中没有括号起来的是总数,括号括起来的部分是活动进程使用的内存数,free则是真实空闲的物理内存数.
进程信息的列包括
CPU TTY PID USERNAME PRI NI SIZE RES STATE TIME %WCPU %CPU COMMAND
和内存相关的只有SIZE和RES
SIZE:任务的代码加上数据再加上栈空间的大小。
RES:任务使用的物理内存的总数量
要检查进程是否有内存泄露,和实际占用的内存大小,看RES列即可.
2:检查共享内存占用的内存容量
使用ipcs -m -b命令,-m表示检查共享内存,-b表示输出每个内存的字节数,得到的共享内存信息输出列包括:
T ID KEY MODE OWNER GROUP SEGSZ
SEGSZ列则是字节数.把每列相加则是共享内存占用的内存总数.
|
GDB调试!