0. 概述

在 Linux 下稍微定位过性能问题的同学应该对 Top 命令都是了解的,但是,不知道你对 Top 命令的了解有多少,本文就个人的理解进行一个总结。

1. 总览

第一步还是快速看一个最平凡的例子,那就是什么参数都不加执行执行 top 命令的时候的输出是什么:

图 1:平凡的 Top 命令

这里可以看到整体的结构为:

上面有 5 行的 summary,每行对应的为:

然后下面就是具体的进程信息,默认为 CPU Usage 排序。这里默认显示的字段分别为:

这些都是默认的输出,已经可以帮助我们很多了,但是,很多时候,我们需要的信息更加具体,所以需要看一些额外的信息。下面就列举一些常见的场景。

2. 查看特定的进程

因为下半部分的进程列表是动态的,我们很可能只想看某个具体的进程,那么可以这么看:

  1. [root@liqiang.io]# top -p 2140
图 2:查看具体的进程

3. 查看更多的字段

  1. [root@liqiang.io]# top -p 2140

使用 top 命令,然后按 ‘f’ 键,就进入了字段选择页面,按 ‘d’ 选择/取消对应的字段:

图 3:查看对应的字段

3.1 内存排序

Shift + M

3.2 CPU 排序

Shift + P

查看进程的线程数

  1. [root@liqiang.io]# top -Hp 460643
  2. top - 17:08:31 up 44 days, 23 min, 1 user, load average: 0.00, 0.01, 0.04
  3. Threads: 9 total, 0 running, 9 sleeping, 0 stopped, 0 zombie
  4. %Cpu(s): 1.1 us, 0.5 sy, 0.0 ni, 98.2 id, 0.1 wa, 0.0 hi, 0.0 si, 0.1 st
  5. MiB Mem : 3731.2 total, 483.4 free, 1014.9 used, 2233.0 buff/cache
  6. MiB Swap: 0.0 total, 0.0 free, 0.0 used. 2228.9 avail Mem
  7. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  8. 460643 root 20 0 1311756 38284 11260 S 0.0 1.0 9:14.31 http-server
  9. 460704 root 20 0 1311756 38284 11260 S 0.0 1.0 8:04.01 http-server
  10. 460705 root 20 0 1311756 38284 11260 S 0.0 1.0 6:35.95 http-server
  11. 460706 root 20 0 1311756 38284 11260 S 0.0 1.0 9:23.04 http-server
  12. 460707 root 20 0 1311756 38284 11260 S 0.0 1.0 9:16.96 http-server
  13. 460708 root 20 0 1311756 38284 11260 S 0.0 1.0 0:00.00 http-server
  14. 460710 root 20 0 1311756 38284 11260 S 0.0 1.0 5:47.84 http-server
  15. 460878 root 20 0 1311756 38284 11260 S 0.0 1.0 9:13.93 http-server
  16. 461863 root 20 0 1311756 38284 11260 S 0.0 1.0 6:07.49 http-server

这里的 Threads: 9 total 就是进程开启的线程数量

4. Zombie 进程是什么

5. 为什么有 Priority 和 Nice 两个优先级

这两个值都能影响系统对进程的调度优先级,数值越低,优先级越高,区别在于:

真实调度的时候的优先级 Real Priority = Priority + Nice,所以用户可以根据设置 Nice 值在一定程度上影响对应进程的调度优先级。

6. Ref