1.top
top -b -n 1 |grep opera|awk '{print "cpu:"$9"%","mem:"$10"%"}'
cpu:0.0% mem:26.4%
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保持不变。”
我们之所以看到许多内存的值的大小超过了内存的总的大小
是因为这里显示的都是虚拟内存的大小,而不是实际的占用的大小;
这是其它的地方的解释
From cat /proc/4743/statm61145018500188318059343101. size :- total program size (611450 X 4096/1024 = 2445800kB = 2388M)2. resident :- resident set size (185001 X 4096/1024 = 740004kB = 722M)3. share :- shared pages (883 X 4096 = 3532)4. trs :- text (code) (18 X 4096/1024 = 72kB = VmExe )5. drs :- data/stack6. lrs :- library (593431 X 4096/1024 = 2373724kB = VmData +VmStk)7. dt :- dirty pages
从这里可以看出第一项是进程的可执行的大小,X4就等于VmSize
而第二项的值X4就等于VmRSS
1、top
top命令是下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于的任务管理器
内容解释:
PID:进程的IDUSER:进程所有者PR:进程的优先级别,越小越优先被执行NInice:值VIRT:进程占用的虚拟内存RES:进程占用的物理内存SHR:进程使用的共享内存S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数%CPU:进程占用CPU的使用率%MEM:进程使用的物理内存和总内存的百分比TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。COMMAND:进程启动命令名称
常用的命令:
P:按%CPU使用率排行T:按MITE+排行M:按%MEM排行
2、/proc/pid
测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息
说明:
/proc/N pid为N的进程信息/proc/N/cmdline进程启动命令/proc/N/cwd链接到进程当前目录/proc/N/environ进程环境变量列表/proc/N/exe链接到进程的执行命令文件/proc/N/fd包含进程相关的所有的文件描述符/proc/N/maps与进程相关的内存映射信息/proc/N/mem指代进程持有的内存,不可读/proc/N/root链接到进程的根目录/proc/N/stat进程的状态/proc/N/statm进程使用的内存的状态/proc/N/status进程状态信息,比stat/statm更具可读性/proc/self链接到当前正在运行的进程
3、pmap
pmap命令可以显示一个或多个进程所使用的内存数量。你可以使用这个工具来了解服务器上的某个进程分配了多少内存,并以此来判断这是否是导致内存瓶颈的原因。要得到更加详细的信息,使用pmap -d选项。