日期:2014-05-16  浏览次数:20654 次

查看linux进程内存的使用情况
要查看linux内存的使用情况,使用free命令 加上-m选项是以M来表示的,不加是以k来表示的





total:总计物理内存的大小。

used:已使用多大。

free:可用有多少。

Shared:多个进程共享的内存总额。

Buffers/cached:磁盘缓存的大小。

第三行(-/+ buffers/cached):

used:已使用多大。

free:可用有多少。

第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。

这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是802880KB,已用内存是742616KB,其中包括,内核(OS)使用+Application(X,oracle,etc)使用的+buffers+cached.

第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。

所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached.

1244664=802880 + 121160 + 320624  也就是还有1G多的内存可以用

可以看出 这个值就是-/+ buffers/cache: 这一行的free
所以查看linux的内存查大概用情况就看-/+ buffers/cache:这一行就可以
这里实际占用300832 也就是300m左右  还可以使用1244664 1个多G


查看某一个进程的内存使用情况

第一种方法:ps aux|grep 进程名
例如:ps aux|grep pencil
alecyan   2811  0.0  2.8 112012 44520 ?        Sl   11:06   0:00 pencil
alecyan   2837  0.0  0.0   6364   868 pts/0    S+   11:14   0:00 grep --color=auto pencil
看到两个进程,第一个就是我们要找的进程,第二个是我们用grep的命令时的进程
上面的112012是任务虚拟地址空间的大小 ,44520应用程序正在使用的物理内存的大小,这个44520其实就是我们关心的

第二种方法:
cat /proc/进程号/status
例如:cat /proc/2811/status
ame: pencil
State: S (sleeping)
Tgid: 2811
Pid: 2811
PPid: 1281
TracerPid: 0
Uid: 1000 1000 1000 1000
Gid: 1000 1000 1000 1000
FDSize: 32
Groups: 4 24 27 30 46 108 124 1000
VmPeak:   112016 kB
VmSize:   111472 kB
VmLck:        0 kB
VmPin:        0 kB
VmHWM:    44520 kB
VmRSS:    44108 kB
VmData:    24612 kB
VmStk:      136 kB
VmExe:      816 kB
VmLib:    70332 kB
VmPTE:      200 kB
VmSwap:        0 kB
Threads: 2
SigQ: 0/11946
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001000
SigCgt: 0000000180010000
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000001fffffffff
Seccomp: 0
Cpus_allowed: ff
Cpus_allowed_list: 0-7
Mems_allowed: 1
Mems_allowed_list: 0
voluntary_ctxt_switches: 771
nonvoluntary_ctxt_switches: 984

任务虚拟地址空间的大小 VmSize  = 111472
应用程序正在使用的物理内存的大小 VmRSS = 44108 这个就是现在实际占用的