您的位置:首页 > 运维架构 > Linux

linux 查看进程占用内存

2016-05-05 11:35 567 查看


1.top

top -b -n 1 |awk '{print "cpu:"$9"%","mem:"$10"%"}'

cpu:average:% mem:0.06,%

cpu:stopped,% mem:0%

cpu:id,% mem:5.1%

cpu:38984% mem:buffers%

cpu:592484% mem:cached%

cpu:% mem:%

cpu:%CPU% mem:%MEM%

cpu:6.5% mem:1.2%

cpu:0.0% mem:0.1%

cpu:0.0% mem:0.0%

...


2. ps aux

其中:

RSS-------------进程实际占用物理内存大小;

VSZ--------------任务虚拟地址空间的大小


3. /proc/pid/status

[root@localhost ~]# cat /proc/self/status

Name: cat

State: R (running)

SleepAVG: 88%

Tgid: 5783

Pid: 5783

PPid: 5742

TracerPid: 0

Uid: 0 0 0 0

Gid: 0 0 0 0

FDSize: 256

Groups: 0 1 2 3 4 6 10

VmSize: 6588 kB

VmLck: 0 kB

VmRSS: 400 kB

VmData: 144 kB

VmStk: 2040 kB

VmExe: 14 kB

VmLib: 1250 kB

StaBrk: 0804e000 kB

Brk: 088df000 kB

StaStk: bfe03270 kB

ExecLim: 0804c000

Threads: 1

SigPnd: 0000000000000000

ShdPnd: 0000000000000000

SigBlk: 0000000000000000

SigIgn: 0000000000000000

SigCgt: 0000000000000000

CapInh: 0000000000000000

CapPrm: 00000000fffffeff

CapEff: 00000000fffffeff

输出解释

参数 解释

Name 应用程序或命令的名字

State 任务的状态,运行/睡眠/僵死/

SleepAVG 任务的平均等待时间(以nanosecond为单位),交互式任务因为休眠次数多、时间长,它们的 sleep_avg

也会相应地更大一些,所以计算出来的优先级也会相应高一些。

Tgid 线程组号

Pid 任务ID

Ppid 父进程ID

TracerPid 接收跟踪该进程信息的进程的ID号

Uid Uid euid suid fsuid

Gid Gid egid sgid fsgid

FDSize 文件描述符的最大个数,file->fds

Groups

VmSize(KB) 任务虚拟地址空间的大小

(total_vm-reserved_vm),其中total_vm为进程的地址空间的大小,reserved_vm:进程在预留或特殊的内存间的物理页

VmLck(KB) 任务已经锁住的物理内存的大小。锁住的物理内存不能交换到硬盘 (locked_vm)

VmRSS(KB) 应用程序正在使用的物理内存的大小,就是用ps命令的参数rss的值 (rss)

VmData(KB) 程序数据段的大小(所占虚拟内存的大小),存放初始化了的数据;

(total_vm-shared_vm-stack_vm)

VmStk(KB) 任务在用户态的栈的大小 (stack_vm)

VmExe(KB) 程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库 (end_code-start_code)

VmLib(KB) 被映像到任务的虚拟内存空间的库的大小 (exec_lib)

VmPTE 该进程的所有页表的大小,单位:kb

Threads 共享使用该信号描述符的任务的个数,在POSIX多线程序应用程序中,线程组中的所有线程使用同一个信号描述符。

SigQ 待处理信号的个数

SigPnd 屏蔽位,存储了该线程的待处理信号

ShdPnd 屏蔽位,存储了该线程组的待处理信号

SigBlk 存放被阻塞的信号

SigIgn 存放被忽略的信号

SigCgt 存放被俘获到的信号

CapInh Inheritable,能被当前进程执行的程序的继承的能力

CapPrm

Permitted,进程能够使用的能力,可以包含CapEff中没有的能力,这些能力是被进程自己临时放弃的,CapEff是CapPrm的一个子集,进程放弃没有必要的能力有利于提高安全性

CapEff Effective,进程的有效能力

范例 1

可以看出该应用程序的正文段(1KB)很小,说明代码很少,是依靠库(1251KB)来执行。栈(138KB)适中,说明 没有太多许多嵌套函数或特别多的临时变量。VmLck为0说明进程没有锁住任何页。VmRSS表示当前进程使用的物理内存为2956KB。当进程开始使用 已经申请的但还没有用的内存时,VmRSS的值开始增大,但是VmSize保持不变。

[root@localhost 1]# cat /proc/4668/status

Name: gam_server

State: S (sleeping)

SleepAVG: 88%

Tgid: 31999

Pid: 31999

PPid: 1

TracerPid: 0

Uid: 0 0 0 0

Gid: 0 0 0 0

FDSize: 256

Groups: 0 1 2 3 4 6 10

VmSize: 2136 kB

VmLck: 0 kB

VmRSS: 920 kB

VmData: 148 kB

VmStk: 88 kB

VmExe: 44 kB

VmLib: 1820 kB

VmPTE: 20 kB

Threads: 1

SigQ: 1/2047

SigPnd: 0000000000000000

ShdPnd: 0000000000000000

SigBlk: 0000000000000000

SigIgn: 0000000000001006

SigCgt: 0000000210000800

CapInh: 0000000000000000

CapPrm: 00000000fffffeff

CapEff: 00000000fffffeff

[root@localhost 31999]#4 /proc//statm

包含了所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。

[root@localhost ~]# cat /proc/self/statm

654 57 44 0 0 334 0

以下是我自己的理解:

从上面可以看出VmRSS才是我们最关心的内存大小,即

正在使用的物理内存的大小;

而VmSize是进程所拥有的虚拟空间的大小;

“当进程开始使用 已经申请的但还没有用的内存时,

VmRSS的值开始增大,但是VmSize保持不变。”

我们之所以看到许多内存的值的大小超过了内存的总的大小

是因为这里显示的都是虚拟内存的大小,而不是实际的占用的大小;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: