(1)top使命
代码如下 | 复制代码 |
$ top -u oracle |
1、top命令
代码如下 | 复制代码 |
top -d 1 -p pid [,pid ...] //设置为delay 1s,默认是delay 3s |
如果想根据内存使用量进行排序,可以shift + m(Sort by memory usage)
(2)pmap
可以根据进程查看进程相关信息占用的内存情况,(进程号可以通过ps查看)如下所示:
代码如下 | 复制代码 |
$ pmap -d 14596 |
(3)ps
如下例所示:
代码如下 | 复制代码 |
$ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' 其中rsz是是实际内存 $ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | grep oracle | sort -nrk5 |
其中rsz为实际内存,上例实现按内存排序,由大到小
静态查看一个进程的内存使用
1、pmap命令
代码如下 | 复制代码 |
pmap pid |
2、ps命令
代码如下 | 复制代码 |
ps aux|grep process_name |
3、查看/proc/process_id/文件夹下的status文件
代码如下 | 复制代码 |
Name: php State: R (running) SleepAVG: 0% Tgid: 21574 Pid: 21574 PPid: 10005 TracerPid: 0 Uid: 1000 1000 1000 1000 Gid: 100 100 100 100 FDSize: 256 Groups: 16 100 VmPeak: 161740 kB VmSize: 161740 kB VmLck: 0 kB VmHWM: 107144 kB VmRSS: 107144 kB VmData: 106192 kB VmStk: 84 kB VmExe: 5588 kB VmLib: 7884 kB VmPTE: 268 kB Threads: 1 SigQ: 0/69632 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 0000000000001000 SigCgt: 00000001818040a7 CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000 Cpus_allowed: 00000000,00000000,00000000,0000000f Mems_allowed: 1 |
任务虚拟地址空间的大小 VmSize
应用程序正在使用的物理内存的大小 VmRSS
查看内存我们一般用free命令:
代码如下 | 复制代码 |
[root@scs-2 tmp]# free total used free shared buffers cached Mem: 3266180 3250004 16176 0 110652 2668236 -/+ buffers/cache: 471116 2795064 Swap: 2048276 80160 1968116 |
下面是对这些数值的解释:
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解释了。
区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
占用内存的测量
测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。
代码如下 | 复制代码 |
/proc/meminfo 机器的内存使用信息 /proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。 /proc/pid/statm 进程所占用的内存 [root@localhost ~]# cat /proc/self/statm 654 57 44 0 0 334 0 |
输出解释
CPU 以及CPU0。。。的每行的每个参数意思(以第一行为例)为:
参数 解释 /proc//status
代码如下 | 复制代码 |
Size (pages) 任务虚拟地址空间的大小 VmSize/4 Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4 Shared(pages) 共享页数 0 Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4 Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4 Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4 dt(pages) 04 |
查看机器可用内存
代码如下 | 复制代码 |
/proc/28248/>free total used free shared buffers cached Mem: 1023788 926400 97388 0 134668 503688 -/+ buffers/cache: 288044 735744 Swap: 1959920 89608 1870312 |
我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。
所以 空闲内存=free+buffers+cached=total-used