Linux系统查看一个进程占用的CPU和内存
top命令
top -p pid
top -p 7746 # 查看进程的信息
top - 10:33:32 up 247 days, 22:26, 1 user, load average: 0.22, 0.08, 0.02
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
Cpu(s): 10.7%us, 1.2%sy, 0.0%ni, 87.9%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 16334568k total, 15955136k used, 379432k free, 524960k buffers
Swap: 16383992k total, 558004k used, 15825988k free, 9008916k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7746 root 20 0 11.2g 3.9g 90m S 43.6 25.3 765:41.49 java
分析说明:
PID :进程pid
USER: root , OS系统用户
NI: 进程执行的系统有限级
VIRT:kb为单位, virtual memory usage,虚拟内存的使用量. 如果申请了100M,而实际使用了不到100M,则实际申请的为100M。 则最大的值分配,而实际可能并没有使用这么多的虚拟内存的量。 具体实际使用了多少,则需要进一步分析。
RES:kb为单位, resident memory usage,常驻内存。也就是当前进程使用的内存,不包括swap out. 。 同上述使用的VIRT分配机制相反,当申请使用100M,而实际使用的是10M,则此值只分配10M。 而关于库占用内存的情况,它只统计加载的库文件所占内存大小。包含当前进程占用的共享内存。
SHR:kb为单位, 共享内存的占用情况。除了自身占用的共享内存,也包含其它进程占用的共享内存(也就是linux类似so库加载的共享内存)。
所以,当前进程占用的实际物理内存为(独有):RES-SHR
%CPU : 上次更新到现在的CPU时间占用百分比. 这里是显示的是多个cpu占用率的总和。 如果操作系统的cpu是8个,则最大可以达到800%。 而整体的cpu使用率,可看首三行来确定。
%MEM:占用物理内存的百分比,整体的。机器总内存 *%MEM 约等于RES
TIME+: 进程运行的时间
COMMAND: 运行的具体内存
注: linux内存分配机制原理?待进一步整理。
通过/proc目录进程统计信息看
linux查看进程运行时信息
目录/proc/进程号/status
cat /proc/7746/status
运行结果 :
Name: java
State: S (sleeping)
Tgid: 7746
Pid: 7746
PPid: 3289
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
Utrace: 0
FDSize: 1024
Groups: 0 490
VmPeak: 11947528 kB
VmSize: 11881992 kB
VmLck: 0 kB
VmHWM: 4219428 kB
VmRSS: 4218912 kB
VmData: 11604424 kB
VmStk: 96 kB
VmExe: 4 kB
VmLib: 17608 kB
VmPTE: 8728 kB
VmSwap: 0 kB
Threads: 232
SigQ: 3/127458
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000301000
SigCgt: 20000001800044ff
CapInh: 0000000000000000
CapPrm: ffffffffffffffff
CapEff: ffffffffffffffff
CapBnd: ffffffffffffffff
Cpus_allowed: f
Cpus_allowed_list: 0-3
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 3
nonvoluntary_ctxt_switches: 1
其中:
VmRSS: 4218912 kB 当前进程运行的内战的内存。
通过ps aux查看进程使用量
ps aux : 列出进程所有的信息
通过awk过滤显示具体进程信息
命令行: ps aux|awk 'BEGIN{print "USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND"}{if($2==7746){print}}'
显示结果:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 7746 11.4 25.8 11881992 4219584 ? Sl Aug18 782:54 /app/IBM/WebSphere/AppServer/java_1.7_64/bin/java
RSS:为当前进程占用的内存数据
%CPU:占用的总的CPU的百分比
注:按内存使用%MEM 从到小排序 ps aux|sort -k4nr |head -n 10 以第四个fields排序,并显示。