Linux命令之top

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 进程id
  • USER 所属用户
  • PR 优先级
  • NI nice值
  • VIRT 虚拟内存
  • RES 资源内存
  • SHR 共享内存
  • S 进程状态,D表示不可中断的睡眠,R表示正在运行,S表示正在睡眠,T表示被跟踪或已停止,Z表示僵死进程,跟各状态任务个数对应
  • %CPU CPU使用率
  • %MEM 内存使用率
  • TIME+ 运行时间
  • COMMAND 进程对应命令