top命令详解
top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。
1 命令格式
[options]选项 :
-d:number代表秒数,表示top命令显示的页面更新一次的间隔,默认是3秒。
-b:以批次的方式执行top
-n:与-b配合使用,表示需要进行几次top命令的输出结果
-p:指定特定的pid进程号进行观察
-i:使top不显示任何闲置或者僵死的进程
-c:显示整个命令行而不只是显示命令名
例如:
top # 每隔3秒显示所有进程的资源占用情况 top -d 1 # 每隔1秒显示所有进程的资源占用情况 top -c # 每隔3秒显示进程的资源占用情况,并显示进行的命令行参数 top -p 8080 -p 8081 # 每隔3秒显示pid是8080和pid是8081这两个进程的资源占用情况 top -d 2 -c -p 8080 # 每隔2秒显示pid是8080的进程资源使用情况,并显示该进程启动的命令行参数
在 top 命令显示的页面还可以输入以下按键执行相应的功能(注意大小写区分的):
?:显示在top当中可以输入的命令
P:以CPU的使用资源排序显示
M:以内存的使用资源排序显示
N:以pid排序显示
T:由进程使用的时间累计排序显示
k:给某一个pid一个信号。可以用来杀死进程
r:给某个pid重新定制一个nice值(即优先级)
q:退出top(用ctrl+c也可以退出top)。
2 输出参数含义
执行 top 命令之后的会展示如下内容(CentOS 7):
2.1 top前5行的统计信息
第1行 top
top - 18:03:36 up 65 days, 4:07, 1 user, load average: 0.18, 0.10, 0.10
top:当前时间
up:系统运行时间,最小单位:分
users:当前登录用户数
load average:系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
第1行主要内容就是看 load average,load average 飙升可能有很多情况,一般来说如果数字不超过当前CPU的核数,就不会大问题。
第2行 Tasks
Tasks: 316 total, 1 running, 315 sleeping, 0 stopped, 0 zombie
第2行显示的进程数。
total:进程总数
running:正在运行的进程数
sleeping:休眠的进程数
stopped:停止的进程数
zombie:僵尸进程数
第3行 CPU
%Cpu(s): 3.8 us, 2.9 sy, 0.0 ni, 93.1 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
第3行展示的CPU的情况
us:用户空间占CPU的百分比(像shell程序、各种语言的编译器、各种应用、web服务器和各种桌面应用都算是运行在用户地址空间的进程,这些程序如果不是处于idle状态,那么绝大多数的CPU时间都是运行在用户态)
sy: 内核空间占CPU的百分比(所有进程要使用的系统资源都是由Linux内核处理的,对于操作系统的设计来说,消耗在内核态的时间应该是越少越好,在实践中有一类典型的情况会使sy变大,那就是大量的IO操作,因此在调查IO相关的问题时需要着重关注它
ni:用户进程空间改变过优先级(ni是nice的缩写,可以通过nice值调整进程用户态的优先级,这里显示的ni表示调整过nice值的进程消耗掉的CPU时间,如果系统中没有进程被调整过nice值,那么ni就显示为0
id: 空闲CPU占用率
wa: 等待输入输出的CPU时间百分比(和CPU的处理速度相比,磁盘IO操作是非常慢的,有很多这样的操作,比如,CPU在启动一个磁盘读写操作后,需要等待磁盘读写操作的结果。在磁盘读写操作完成前,CPU只能处于空闲状态。Linux系统在计算系统平均负载时会把CPU等待IO操作的时间也计算进去,所以在我们看到系统平均负载过高时,可以通过wa来判断系统的性能瓶颈是不是过多的IO操作造成的)
hi: 硬中断占用百分比(硬中断是硬盘、网卡等硬件设备发送给CPU的中断消息,当CPU收到中断消息后需要进行适当的处理(消耗CPU时间)。)
si:软中断占用百分比(软中断是由程序发出的中断,最终也会执行相应的处理程序,消耗CPU时间)
st:steal time
第4行 Mem
KiB Mem : 16265788 total, 1166452 free, 13783640 used, 1315696 buff/cache
total:物理内存总量
free:空闲内存量
used:使用的内存量
buffer/cache:用作内核缓存的内存量
第5行 Swap
KiB Swap: 0 total, 0 free, 0 used. 2126272 avail Mem
total:交换区内存总量
free:空闲交换区总量
used:使用的交换区总量
buffer/cache:缓冲的交换区总量
第四第五行分别是内存信息和swap信息,所有程序的运行都是在内存中进行的,所以内存的性能对与服务器来说非常重要。不过当内存的free变少的时候,其实我们并不需要太紧张。真正需要看的是Swap中的used信息。Swap分区是由硬盘提供的交换区,当物理内存不够用的时候,操作系统才会把暂时不用的数据放到Swap中。所以当这个数值变高的时候,说明内存是真的不够用了。
2.2 进程信息
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 27202 root 20 0 12.4g 1.4g 78700 S 5.7 9.4 7221:51 exe 27183 root 20 0 1524744 639664 39952 S 1.1 4.1 1378:24 rancher
PID:进程ID
USER:进程所有者的用户名
PR:优先级
NI:nice值,负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存总量,单位kb,VIRT = SWAP + RES
RES:进程使用的、未被换出的物理内存大小,单位kb,RES = CODE + DATA
SHR:共享内存大小,单位kb
S:进程状态:D=不可中断的睡眠状态、 R=运行、 S=睡眠、 T=跟踪/停止、 Z=僵尸进程
%CUP:上次更新到现在的CPU时间占用百分比
%MEM:进程使用的物理内存百分比
TIME+:进程使用的CPU时间总计,单位1/100秒
COMMAND:命令名/命令行