top 命令主要用于查看进程的相关信息,同时它也会提供系统平均负载,cpu 信息和内存信息。下面的截图展示了 top 命令默认提供的信息:
top 命令输出中的第一行是系统的平均负载,这和 uptime 命令的输出是一样的:
13:05:49 表示系统当前时间。
up 7 days 表示系统最后一次启动后总的运行时间。
1 user 表示当前系统中只有一个登录用户。
load average: 0.01, 0.04, 0.00 表示系统的平均负载,最后的三个数字分别表示最后一分钟的系统平均负载,最后五分钟的系统平均负载,最后十五分钟的系统平均负载。
在 linux 系统中,一般把进程和线程统称为任务。第二行信息是对当前系统中所有任务的统计:
Tasks:270 total 表示当前系统的进程总数。
1 running 表示当前系统中有 1 个正在运行的进程。
269 sleeping 表示当前系统中有 269 个休眠的进程。
0 stopped 表示停止状态的进程数为 0。
0 zombie 表示处于僵死状态的进程数为 0。
第三行显示 CPU 的使用情况:
这里一共有八个字段,是我们了解 CPU 负载的主要依据,下面我们逐一介绍。
us
进程在用户地址空间中消耗 CPU 时间的百分比。像 shell程序、各种语言的编译器、数据库应用、web 服务器和各种桌面应用都算是运行在用户地址空间的进程。这些程序如果不是处于 idle 状态,那么绝大多数的 CPU 时间都是运行在用户态。
sy
在用户空间模拟操作系统对进程的调度,来调用一个进程中的线程,每个进程中都会有一个运行时系统,用来调度线程。1.通过中断处理过程中的调度时机,用户态进程与内核线程之间互相切换和内核线程之间互相切换,与最一般的情况非常相似,只是内核线程运行过程中发生中断没有进程用户态和内核态的转换。其实也有各自的真实pid,但由结构隐藏了,对外的pid为主进程的pid5)线程对操作系统来说就是进程,因此对信号的处理是以进程为单位分发的6)线程总数受限于系统进程数7)系统管理线程的瓶颈:所有线程由管理线程管理8)线程之间的调度是由内核调度器来处理的9)由于计算线程本地数据的方法是基于堆栈地址的位置。
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 操作造成的。
hi & si
这两个值表示系统处理中断消耗的时间。中断分为硬中断和软中断,hi 表示处理硬中断消耗的时间,si 表示处理软中断消耗的时间。硬中断是硬盘、网卡等硬件设备发送给 CPU 的中断消息,当 CPU 收到中断消息后需要进行适当的处理(消耗 CPU 时间)。软中断是由程序发出的中断,最终也会执行相应的处理程序(消耗 CPU 时间)。