inux查看某个进程内存占用情况以及/proc/pid/status解释

以nginx 为例
1.top
top -b -n 1 |grep nginx|awk ‘{print “VIRT:”$5,“RES:”$6,“cpu:”$9"%“,“mem:”$10”%"}’

或者简单的top -p 进程id.

  1. ps aux | grep nginx
    VSZ – 虚拟地址空间大小 --> 与top 的 VIRT 对应
    RSS – 实际物理内存大小 --> 与top 的 RES 对应

aux a-所有用户, x-运行, 结合才能列出所有pid 信息,u-user 信息,例如cpu,mem, tty, stat, 等信息,BSD 格式

ef 选项: 使用标准格式显示每一个进程。 有一个PPID, 与aux BSD格式显示方式不同。

3.cat /proc/pid/status
pid 是你关心的nginx 进程pid.
其中的
VmRss --> Rss
VmSize --> VSZ

三种方法可以互相对照, 结果是一样的。

/proc/pid/status解释

/proc/9744$ cat status

Name: gedit /进程的程序名/
State: S (sleeping) /进程的状态信息,具体参见http://blog.chinaunix.net/u2/73528/showart_1106510.html/
Tgid: 9744 /线程组号/
Pid: 9744 /进程pid/
PPid: 7672 /父进程的pid/
TracerPid: 0 /跟踪进程的pid/
Uid: 1000 1000 1000 1000 /uid euid suid fsuid/
Gid: 1000 1000 1000 1000 /gid egid sgid fsgid/
FDSize: 256 /文件描述符的最大个数,file->fds/
Groups: 0 4 20 24 25 29 30 44 46 107 109 115 124 1000 /启动该进程的用户所属的组的id/
VmPeak: 60184 kB /进程地址空间的大小/
VmSize: 60180 kB /进程虚拟地址空间的大小reserved_vm:进程在预留或特殊的内存间的物理页/
VmLck: 0 kB /进程已经锁住的物理内存的大小.锁住的物理内存不能交换到硬盘/
VmHWM: 18020 kB /文件内存映射和匿名内存映射的大小/
VmRSS: 18020 kB /应用程序正在使用的物理内存的大小,就是用ps命令的参数rss的值 (rss)/
VmData: 12240 kB /程序数据段的大小(所占虚拟内存的大小),存放初始化了的数据/
VmStk: 84 kB /进程在用户态的栈的大小/
VmExe: 576 kB /*程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库 */
VmLib: 21072 kB /被映像到任务的虚拟内存空间的库的大小/
VmPTE: 56 kB /该进程的所有页表的大小/
Threads: 1 /共享使用该信号描述符的任务的个数/
SigQ: 0/8183 /待处理信号的个数/目前最大可以处理的信号的个数/
SigPnd: 0000000000000000 /屏蔽位,存储了该线程的待处理信号/
ShdPnd: 0000000000000000 /屏蔽位,存储了该线程组的待处理信号/
SigBlk: 0000000000000000 /存放被阻塞的信号/
SigIgn: 0000000000001000 /存放被忽略的信号/
SigCgt: 0000000180000000 /存放被俘获到的信号/
CapInh: 0000000000000000 /能被当前进程执行的程序的继承的能力/
CapPrm: 0000000000000000 /进程能够使用的能力,可以包含CapEff中没有的能力,这些能力是被进程自己临时放弃的/
CapEff: 0000000000000000 /是CapPrm的一个子集,进程放弃没有必要的能力有利于提高安全性/
Cpus_allowed: 01 /可以执行该进程的CPU掩码集/
Mems_allowed: 1 /**/
voluntary_ctxt_switches: 1241 /进程主动切换的次数/
nonvoluntary_ctxt_switches: 717 /进程被动切换的次数/

FDSize: 32
解释:
FDSize是当前分配的文件描述符,这个值不是当前进程使用文件描述符的上限.
我们看到这里是32,但实际并没有分配32个文件,如下:
ls -l /proc/pgrep rsyslogd|grep -v grep/fd
total 0
lrwx------ 1 root root 64 2011-04-20 20:03 0 -> socket:[5741]
l-wx------ 1 root root 64 2011-04-20 20:03 1 -> /var/log/auth.log
l-wx------ 1 root root 64 2011-04-20 20:03 10 -> /var/log/mail.err
l-wx------ 1 root root 64 2011-04-20 20:03 11 -> /var/log/news/news.crit
l-wx------ 1 root root 64 2011-04-20 20:03 12 -> /var/log/news/news.err
l-wx------ 1 root root 64 2011-04-20 20:03 13 -> /var/log/news/news.notice
l-wx------ 1 root root 64 2011-04-20 20:03 14 -> /var/log/debug
l-wx------ 1 root root 64 2011-04-20 20:03 15 -> /var/log/messages
lrwx------ 1 root root 64 2011-04-20 20:03 16 -> /dev/xconsole
lr-x------ 1 root root 64 2011-04-20 20:03 17 -> /proc/kmsg
l-wx------ 1 root root 64 2011-04-20 20:03 2 -> /var/log/syslog
l-wx------ 1 root root 64 2011-04-20 20:03 3 -> /var/log/daemon.log
l-wx------ 1 root root 64 2011-04-20 20:03 4 -> /var/log/kern.log
l-wx------ 1 root root 64 2011-04-20 20:03 5 -> /var/log/lpr.log
l-wx------ 1 root root 64 2011-04-20 20:03 6 -> /var/log/mail.log
l-wx------ 1 root root 64 2011-04-20 20:03 7 -> /var/log/user.log
l-wx------ 1 root root 64 2011-04-20 20:03 8 -> /var/log/mail.info
l-wx------ 1 root root 64 2011-04-20 20:03 9 -> /var/log/mail.warn
我们看到这里只用到了18个文件描述符.而如果超过32个文件描述符,将以32进行递增,如果是64位系统,将以64进行递增.
FDSize这个值不会减少,如果我们程序打开了300个文件,并不会因为关闭文件,而减少FDSize这个值.

你可能感兴趣的:(linux)