top命令可以动态实时地显示系统的运行状态,它的输出包括系统信息、进程信息和线程信息等。这篇文章主要讲解top输出的各项信息,以帮助用户更好的理解和使用top。
top的输出信息
top命令在我本地的输出如下:
top - 10:06:56 up 2:38, 1 user, load average: 0.00, 0.03, 0.05
Tasks: 74 total, 1 running, 73 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.0 us, 0.7 sy, 0.0 ni, 94.0 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 772276 total, 281820 used, 490456 free, 30140 buffers
KiB Swap: 976892 total, 0 used, 976892 free. 126516 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1359 root 20 0 69700 30232 13524 S 4.6 3.9 4:17.45 emacs
1780 root 20 0 5080 2796 2448 R 1.0 0.4 0:15.30 top
456 redis 20 0 29660 3084 2472 S 0.7 0.4 0:34.57 redis-server
1 root 20 0 5576 4208 2964 S 0.0 0.5 0:02.46 systemd
第一行:系统运行信息
该输出和uptime
的输出类似。
10:06:56
系统启动时间2:38
系统运行时间1 user
当前系统用户数,这里只有pysnow530一个用户load average: 0.00, 0.03, 0.05
三个数据分别是1分钟、5分钟、15分钟内的负载平均值
注意:这里的负载是指某段时间内待运行任务队列长度的平均值,也就是当前等待运行的任务数。如果当前任务队列数为8,说明有8个任务已处于就绪状态,就等着CPU的时间片了。该值越大,说明系统负载越高。假设系统有一个单核CPU,此值持续大于0.7则说明系统存在问题;为1时即为满负载工作,系统已不能正常处理多余的任务;若CPU大于1,好吧,它已经忙不过来了。此时可查看系统进程,有可能是某进程出问题了。以上是一个单核CPU的情况,如果系统有两个双核CPU,则满负载时值为2x2=4,其它情况可类推。
第二行:各状态任务个数
total
全部任务running
运行中任务sleeping
睡眠中任务stopped
已停止任务zombie
僵死任务
第三行:cpu执行各状态时间占比
us
没有修改nice的进程用户态耗时占比sy
执行内核态耗时占比ni
修改过nice的进程用户态占比id
空闲时间占比wa
等待IO操作耗时占比,我们的CPU已将任务队列的任务运行完了,就等着IO了hi
提供硬件中断耗时占比si
提供软件中断耗时占比st
hypervisor从当前虚拟机偷走的时间占比
注意:如果wa
过高(超过30%),一方面可能是我们的CPU太强悍了,另一方面也有可能是磁盘IO存在瓶颈。此时可通过iostat -x
确认具体情况。
第四行和第五行:内存和交换区的使用信息
该输出和free
命令的输出类似。
total
总容量大小used
已使用容量大小free
剩余容量大小buffers
缓冲区cached Mem
缓存内存,当读写文件时,系统为了提高读写性能,会将文件缓存到缓存内存。
剩余行:每个进程的信息
PID
进程idUSER
所属用户PR
优先级NI
nice值VIRT
虚拟内存RES
资源内存SHR
共享内存S
进程状态,D
表示不可中断的睡眠,R
表示正在运行,S
表示正在睡眠,T
表示被跟踪或已停止,Z
表示僵死进程,跟各状态任务个数对应%CPU
CPU使用率%MEM
内存使用率TIME+
运行时间COMMAND
进程对应命令