Linux 中的 top 命令
Nilesh Katuwal
2023年1月30日
Linux 中的 top
命令旨在帮助用户确定哪些进程处于活动状态以及哪些应用程序消耗的内存或处理能力超出了应有的水平。
top 命令使用起来很简单,但你应该知道具体细节。平均负载是评估服务器性能的一个有问题的指标。
Linux 中 top
命令的详细说明
在终端中输入 top
:
$ top
输出:
top - 00:04:54 up 3:30, 1 user, load average: 1.84, 3.02, 2.50
Tasks: 233 total, 2 running, 231 sleeping, 0 stopped, 0 zombie
%Cpu(s): 38.5 us, 9.5 sy, 0.0 ni, 51.6 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3840.9 total, 277.3 free, 2286.3 used, 1277.3 buff/cache
MiB Swap: 2048.0 total, 1447.0 free, 601.0 used. 777.7 avail Mem
top - 00:04:54 up 3:30, 1 user,
:该命令显示当前系统时间,然后是uptime
,在本例中为 3 小时 30 分钟,最后是登录到系统的用户数,在本例中为 1。通过 SSH,这可以在本地、空闲、屏幕等上完成。load average: 1.84, 3.02, 2.50
:此部分显示平均负载,这可能是一个令人费解的概念,尤其是在处理虚拟机和云时。第一个数字是当前负载平均值,第二个数字是 5 分钟平均值,第三个数字是 15 分钟负载平均值。Tasks: 233 total, 2 running, 231 sleeping, 0 stopped, 0 zombie
:当你键入ps aux
或其使用的变体时会出现应用程序的数量
正在进行的进程数表明你的 CPU 当前正在使用多少。由于非多线程应用程序一次只能使用一个 CPU,因此在四核服务器上通常会看到两种方法占用 50% 的 CPU,平均负载为 2。
休眠进程数表示正在运行但未主动使用;这通常包括许多后台作业、系统软件、打印机驱动程序和其他此类项目。
除非你向进程发送 SIGSTOP
或 kill-STOP
以进行故障排除,否则停止的进程数应为 0
。不同于 0
的值可能会引起生产系统的关注。
涉及僵尸进程的进程表示多线程应用程序创建的子进程突然销毁或终止,留下僵尸进程。
如果发生了可怕的事情,Apache 很可能会采取报复行动。在大多数情况下,这也应该是 0
。
关于 CPU 的信息
%Cpu(s): 38.5 us, 9.5 sy, 0.0 ni, 51.6 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
- 每个处理器使用最多 100% 的时间百分比。因此,在一个进程占用一个 CPU 100% 的四核上,这将表示 25% 的使用率。在 8 核系统上,12.5% 意味着 1 个核心被固定。
- 术语
系统 CPU 利用率百分比
是指使用了多少系统 CPU。此处较高的数字可能表明内核配置存在问题、驱动程序问题或任何其他原因。 - 百分比
ni
表示受nice
或renice
命令影响的用户进程使用的 CPU 百分比,即它们的优先级已从调度程序的默认值修改为更高或更低。正数表示优先级较低,负数表示优先级较高。默认值为 0,这表明调度程序做出决定。 - 从 100.0% 减去前三个数字的结果是百分比
id
,它衡量空闲
处理能力。 wa
是 CPU 等待的% of I/O
。当一个进程或程序需要数据时,它首先检查处理器缓存,然后是内存,最后是磁盘。它通常必须等待 IO 线程完成将信息读取到 RAM 中,然后才能在它碰到磁盘时再次处理它。磁盘越慢,每个进程的 IO 等待百分比就越高。如果等待时间始终大于 100/(CPU 数 * 进程数),则可能存在需要监控的存储问题。如果你检测到高负载平均值,请首先检查此数字。如果此值很高,则磁盘上的进程会出现瓶颈。si
是服务软件中断所花费的时间。与在主板的中断线上请求中断的硬件或设备(驱动程序)不同,Linux 内核在 2.4 版中包含一个功能,允许软件请求中断,内核通过其中断处理程序处理它。这意味着应用程序可以请求优先级状态,内核可以确认收到请求,软件将耐心等待中断被处理。st
指的是被虚拟机窃取的时间。我们不使用 VM 来限制 CPU,因此偶尔让一两个 VM 使用 8 个 CPU 不会损害整个池。如果虚拟机的虚拟 CPU 使用的物理 CPU(或超线程至强处理器中的逻辑 CPU)CPU 的数量大于物理 CPU 的数量,则窃取时间
将增加。
在 Linux 中使用 top
命令
显示 top
命令语法:
$ top -h
输出:
procps-ng 3.3.16
Usage:
top -hv | -bcEHiOSs1 -d secs -n max -u|U user -p pid(s) -o field -w [cols]
你可以在安全模式下使用 top
命令。
$ top -s