对于题目中的问题,我今儿个发表下个人见解,有不正确之处还请大侠们多多指点.
为了定位客户端内存泄露我们首先先判定客户端操作系统是什么?windows还是Unix(Linux)?
无论是windows还是Unix(Linux),我们都可以通过两种方式进行监控和定位:
方式一:
若是windows操作系统,可以通过手动查看性能计数器的状态进行问题定位,近而确认是否是内存泄漏,操作步骤如下:
选择开始-〉控制面板-〉性能和维护-〉管理工具-〉性能查看系统各种资源的使用情况,我们还可以通过图表上面的"+"来选择要查看的计数器信息;
若是unix或者linux系统,可以通过命令行的方式察看系统资源,操作步骤如下:
输入vmstat(-f|-s)命令来监控系统内存使用统计,包括进程信息、memory信息、page信息、错误信息、cpu信息;输入top命令用于显示进程对系统资源的利用程度,包括cpu占用百分比信息,内存资源使用情况;还可以通过free命令察看内存信息;
例如:输入vmstat命令后显示的信息如下:
procs memory page faults cpu
r b w avm free re at pi po fr de sr in sy cs us sy id
1 0 0 925137 928837 535 2 0 0 0 0 0 1001 2271 136 1 1 98
输入top命令后信息显示如下:
System:**** Thu Jun 12 17:43:58 2008
Load averages: 0.02, 0.02, 0.02
178 processes: 166 sleeping, 11 running, 1 zombie
Cpu states:
CPU LOAD USER NICE SYS IDLE BLOCK SWAIT INTR SSYS
0 0.05 0.8% 0.0% 2.0% 97.2% 0.0% 0.0% 0.0% 0.0%
1 0.01 0.0% 0.0% 0.0% 100.0% 0.0% 0.0% 0.0% 0.0%
2 0.01 1.4% 0.0% 1.2% 97.4% 0.0% 0.0% 0.0% 0.0%
3 0.02 0.0% 0.0% 0.2% 99.8% 0.0% 0.0% 0.0% 0.0%
--- ---- ----- ----- ----- ----- ----- ----- ----- -----
avg 0.02 0.6% 0.0% 0.8% 98.6% 0.0% 0.0% 0.0% 0.0%
Memory: 2898688K (1078576K) real, 9436116K (3305252K) virtual, 3714620K free Page# 1/6
CPU TTY PID USERNAME PRI NI SIZE RES STATE TIME %WCPU %CPU COMMAND
0 ? 11015 root 152 20 1314M 480M run 5:55 0.80 0.79 java
1 ? 39 root 152 20 9632K 9632K run 8:18 0.76 0.76 vxfsd
3 pts/ta 5673 fism 178 20 7328K 5372K run 0:00 0.38 0.21 top
0 ? 26606 1001 152 20 147M 14468K run 0:00 0.12 0.12 db2fmp
0 ? 5656 dasusr1 168 20 12104K 1392K sleep 0:00 0.14 0.11 db2admin
1 ? 1624 root 152 20 26128K 4044K run 0:10 0.10 0.10 vxsvc
1 ? 1898 root 152 10 6296K 1008K run 0:00 0.10 0.10 memlogd
3 ? 1748 root 168 20 7876K 888K sleep 5:03 0.08 0.08 db2fmcd
0 ? 517 root 152 20 2276K 332K run 1:05 0.08 0.08 syncer
0 ? 15888 db2inst1 154 20 5849M 14148K sleep 0:03 0.06 0.06 db2agent
1 ? 15841 db2inst1 152 20 253M 32596K run 1:38 0.06 0.06 db2hmon
1 ? 647 root 127 20 5132K 500K sleep 0:16 0.05 0.05 netfmt
0 ? 15859 db2inst1 156 20 5720M 10436K sleep 0:08 0.05 0.04 db2loggr
0 ? 11061 db2inst1 154 20 5848M 14204K sleep 8:19 0.04 0.04 db2agent
3 ? 3 root 128 20 32K 32K sleep 1:06 0.04 0.04 statdaemon
3 ? 29602 1001 152 20 142M 9172K run 0:00 0.04 0.04 db2fmp
0 ? 1319 root 154 20 2752K 376K sleep 1:55 0.04 0.04 pwgrd
0 ? 1165 root 154 20 3900K 732K sleep 0:50 0.03 0.03 sendmail:
1 ? 0 root 127 20 32K 0K sleep 0:12 0.02 0.02 swapper
2 ? 1 root 168 20 496K 204K sleep 0:28 0.02 0.02 init
1 ? 2 root 128 20 32K 32K sleep 0:00 0.02 0.02 vhand
2 ? 4 root 128 20 32K 32K sleep 0:04 0.02 0.02 unhashdaemon
2 ? 19 root 147 20 32K 32K sleep 0:09 0.02 0.02 lvmkd
3 ? 20 root 147 20 32K 32K sleep 0:09 0.02 0.02 lvmkd
2 ? 21 root 147 20 32K 32K sleep 0:09 0.02 0.02 lvmkd
3 ? 22 root 147 20 32K 32K sleep 0:09 0.02 0.02 lvmkd
0 ? 23 root 147 20 32K 32K sleep 0:09 0.02 0.02 lvmkd
0 ? 24 root 147 20 32K 32K sleep 0:09 0.02 0.02 lvmkd
1 ? 32 root 148 20 32K 32K sleep 0:01 0.02 0.02 lvmdevd
2 ? 67 root 148 20 32K 32K sleep 0:02 0.02 0.02 lvmdevd
0 ? 69 root 148 20 32K 32K sleep 0:02 0.02 0.02 lvmdevd
3 ? 533 root 153 20 32K 32K sleep 0:00 0.02 0.02 dmprestored
上面的数值应该很明确了,就不用多说了吧.
方法二:我们也可以通过比较流行的性能测试工具loadRunner进行监控客户端的内存情况:
具体怎样通过LR工具进行设置就不详述了.要添加的监控指标包括:
Memory\Available Mbytes;
Pages/sec、Pages Read/sec和Page Faults/sec;
Physical Disk
下面主要说一说通过监控这些指标,来确定内存问题的步骤:
1.首先查看可用内存(Memory\Available Mbytes)计数器指标。若值较小则可能有内存问题,需进一步分析。
2.注意Pages/sec、Pages Read/sec和Page Faults/sec计数器的值。 Pages/sec和Page Faults/sec的值持续很高,很可能内存问题,若Pages Read/sec的值超过5,则可判断存在内存问题。
3.根据Physical Disk计数器的值分析性能瓶颈。如果磁盘的Average Disk Queue Length计数器增加的同时Pages Read/sec并未降低,则可判断内存有问题。
上面是个人拙见,还请大侠多替宝贵意见!