top 命令主要用于查看进程的相关信息,同时它也会提供系统平均负载,cpu 信息和内存信息。下面的截图展示了 top 命令默认提供的信息:
系统平均负载
top 命令输出中的第一行是系统的平均负载,这和 uptime 命令的输出是一样的:
top - 13:18:59 up 223 days, 15:19, 5 users, load average: 0.15, 0.14, 0.13
13:18:59 表示系统当前时间。
up 223 days 表示系统最后一次启动后总的运行时间。
5 user 表示当前系统中只有一个登录用户。
cpu利用率 系统cpu利用率+用户cpu利用率 cpu相关指标 average load ——平均负载 上一分钟同时处于“就绪”状态的平均进程数 在过去的1分钟,的平均负载 一般来说只要每个cpu的当前活动进程数不大于3那么系统的性能就是良好的,如果每个cpu的任务数大于5,那么就表示这台机器的性能有严重问题。例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟 。子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟执行一次。
小写字母 i 可以控制是否显示系统平均负载信息。
任务信息汇总
在 linux 系统中,一般把进程和线程统称为任务。第二行信息是对当前系统中所有任务的统计:
Tasks: 145 total, 1 running, 144 sleeping, 0 stopped, 0 zombie
Tasks:270 total 表示当前系统的进程总数。
1 running 表示当前系统中有 1 个正在运行的进程。
269 sleeping 表示当前系统中有 269 个休眠的进程。
0 stopped 表示停止状态的进程数为 0。
0 zombie 表示处于僵死状态的进程数为 0。
CPU 信息
第三行显示 CPU 的使用情况:
Cpu(s): 6.5%us, 0.5%sy, 0.0%ni, 93.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
这里一共有八个字段,是我们了解 CPU 负载的主要依据,下面我们逐一介绍。
us
进程在用户地址空间中消耗 CPU 时间的百分比。像 shell程序、各种语言的编译器、数据库应用、web 服务器和各种桌面应用都算是运行在用户地址空间的进程。这些程序如果不是处于 idle 状态,那么绝大多数的 CPU 时间都是运行在用户态。
sy
进程在内核地址空间中消耗 CPU 时间的百分比。所有进程要使用的系统资源都是由 Linux 内核处理的。当处于用户态(用户地址空间)的进程需要使用系统的资源时,比如需要分配一些内存、或是执行 IO 操作、再或者是去创建一个子进程,此时就会进入内核态(内核地址空间)运行。事实上,决定进程在下一时刻是否会被运行的进程调度程序就运行在内核态。对于操作系统的设计来说,消耗在内核态的时间应该是越少越好。在实践中有一类典型的情况会使 sy 变大,那就是大量的 IO 操作,因此在调查 IO 相关的问题时需要着重关注它。
ni
ni 是 nice 的缩写,可以通过 nice 值调整进程用户态的优先级。这里显示的 ni 表示调整过 nice 值的进程消耗掉的 CPU 时间。如果系统中没有进程被调整过 nice 值,那么 ni 就显示为 0。
id
CPU 处于 idle 状态的百分比。一般情况下, us + ni + id 应该接近 100%。
wa
CPU 等待磁盘 IO 操作的时间。和 CPU 的处理速度相比,磁盘 IO 操作是非常慢的。有很多这样的操作,比如:CPU 在启动一个磁盘读写操作后,需要等待磁盘读写操作的结果。在磁盘读写操作完成前,CPU 只能处于空闲状态。Linux 系统在计算系统平均负载时会把 CPU 等待 IO 操作的时间也计算进去,所以在我们看到系统平均负载过高时,可以通过 wa 来判断系统的性能瓶颈是不是过多的 IO 操作造成的。