分类: LINUX
2014-07-15 17:44:29
我们知道,Linux在/proc/{pid}/status中记录了内存使用的实时情况。需要关注的是VmSize(虚拟内存大小),VmData(虚拟数据),VmStk(虚拟栈)这3个域的值。
以下我们以检查nginx服务的内存使用情况为例。
1. 把所有nginx进程的pid写入一个文件:
ps aux|egrep "nginx: (master|worker)"|awk '{print $2}' > nginx_pid.txt
2. 生成变量:
A=`ps aux|egrep "nginx: (master|worker)"|awk '{print "/proc/" $2 "/status "}'`
3. 把所有nginx进程使用的VmSize值写入一个文件:
cat `echo $A`|egrep "VmSize"|awk '{print $2}' > nginx_VmSize.txt
4. 把所有nginx进程使用的VmData值写入一个文件:
cat `echo $A`|egrep "VmData"|awk '{print $2}' > nginx_VmData.txt
5. 把所有nginx进程使用的VmSize值写入一个文件:
cat `echo $A`|egrep "VmStk"|awk '{print $2}' > nginx_VmStk.txt
6. 列印出来:
paste nginx_pid.txt nginx_VmSize.txt nginx_VmData.txt nginx_VmStk.txt | sed '1i pid\tVmSize\tVmData\tVmStk'
综合以上命令:
A=`ps aux|egrep "nginx: (master|worker)"|awk '{print "/proc/" $2 "/status "}'`;ps aux|egrep "nginx: (master|worker)"|awk '{print $2}' > nginx_pid.txt;cat `echo $A`|egrep "VmSize"|awk '{print $2}' > nginx_VmSize.txt;cat `echo $A`|egrep "VmData"|awk '{print $2}' > nginx_VmData.txt;cat `echo $A`|egrep "VmStk"|awk '{print $2}' > nginx_VmStk.txt;paste nginx_pid.txt nginx_VmSize.txt nginx_VmData.txt nginx_VmStk.txt | sed '1i pid\tVmSize\tVmData\tVmStk'
即可打印出当前nginx所有进程使用内存的情况了:
pid VmSize VmData VmStk
733 16908 2752 84
734 16908 2752 84
735 16908 2752 84
736 16908 2752 84
740 16908 2752 84
743 16908 2752 84
746 16908 2752 84
747 16908 2752 84
748 16908 2752 84
749 16908 2752 84
20257 14924 768 84
20959 16920 2764 84
20960 16920 2764 84
20961 16920 2764 84
20962 16920 2764 84
20963 16920 2764 84
20970 16920 2764 84
20971 16920 2764 84
20972 16920 2764 84
20973 16920 2764 84
20974 16920 2764 84
20975 16920 2764 84
20976 16920 2764 84
20977 16920 2764 84
20978 16920 2764 84
20979 16920 2764 84
20980 16920 2764 84
20981 16920 2764 84
20982 16920 2764 84
20983 16920 2764 84
20984 16920 2764 84
28040 15056 900 84
通过比较测试前和测试后的数值,可以观察出是否存在内存泄露。