Linux TOP 命令:不可不知的奇淫巧技

468 阅读6分钟

上篇:最近火起的 Bean Searcher 与 MyBatis Plus 到底有啥区别?

好久没写文章了,笔记中翻出一篇分享给大家,满满干货哦 ^_^

Top 命令

Top 命令是 Linux 下常用的性能分析工具,类似 Windows 下的 任务管理器,它几乎是 Linux 运维最常用的工具之一,所以对它了解透彻非常必要。

数据界面

执行 top 后,页面展示 统计信息进程信息 两块,如下:

top - 09:48:42 up 35 days, 23:48,  8 users,  load average: 0.11, 0.17, 0.18
Tasks: 209 total,   1 running, 208 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.2 us,  3.0 sy,  0.0 ni, 94.0 id,  0.0 wa,  0.3 hi,  0.2 si,  0.3 st
MiB Mem :   7768.0 total,    126.8 free,   6851.6 used,    789.7 buff/cache
MiB Swap:   4060.0 total,   3275.2 free,    784.8 used.    775.4 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
2751932 root      20   0  153700   5368   4396 S   0.7   0.1   5:16.61 sshd
3704017 root      20   0 2646340 939340   4408 S   0.7  11.8   4:13.46 java
 913193 root      20   0   65536   4824   3888 R   0.3   0.1   0:00.01 top
1721621 root      20   0  628456   6700   1196 S   0.3   0.1   2:55.70 docker-proxy
      1 root      20   0  179716   7140   4472 S   0.0   0.1   0:58.45 systemd
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp

统计信息

  • 第一行:时间/用户/负载

    • 09:48:42 - 当前时间
    • up 35 days, 23:48 - 系统运行时间(精确到分)
    • 8 users - 当前登录用户数(查询详细用户,可以再执行 who 命令)
    • load average: 0.11, 0.17, 0.18 - 系统负载(即任务队列的平均长度,三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值)

    负载是对系统工作量的度量。在Linux上,负载是在任何给定时刻处于 R 和 D 状态的进程数。load average 值为提供了必须等待多长时间才能完成任务的相对度量。例如:

    • 单核心系统上,负载 为 0.4 意味着系统只完成了它能完成的 40% 的工作。负载为 1 意味着系统正好处于满负荷状态——即使添加一点点额外的工作,系统也会过载。负载 为 1.5 的系统意味着它超载了 50% 的工作。
    • 在多核系统上,应该首先用 load average 除以 CPU 核数,以得到类似的度量。
  • 第二行:进程信息

    • 209 total - 进程总数
    • 1 running - 正在运行的进程数(对应进程状态 R
    • 208 sleeping - 睡眠的进程数(对应进程状态 SD
    • 0 stopped - 停止的进程数(对应进程状态 T
    • 0 zombie - 僵尸进程数(对应进程状态 Z
  • 第三行:CPU 信息(百分比)

    • 2.2 us - 用户空间占用 CPU 时间(User CPU time)
    • 3.0 sy - 内核空间占用 CPU 时间(System CPU time)
    • 0.0 ni - 用户空间内改变过优先级的进程占用 CPU 时间(Nice CPU time)
    • 94.0 id - CPU 空闲时间(Idle)
    • 0.0 wa - CPU 等待 IO 完成所花时间(IO Wait)
    • 0.3 hi - 硬件中断处理时间(Hardware IRQ)
    • 0.2 si - 软件中断处理时间(Software IRQ)
    • 0.3 st - 窃取(Steal Time: time given to other DomU instances)

      虚拟化环境中,操作系统会检测虚拟机是否有工作要做,如果检测到它需要执行但是由于 CPU 在其他 VM 上繁忙而无法执行时,以这种方式浪费的时间就是 窃取 时间。

  • 第四行:物理内存信息(默认单位:mb)

    • 7768.0 total - 物理内存总量
    • 126.8 free - 空闲内存总量
    • 6851.6 used - 使用的物理内存总量
    • 789.7 buff/cache - 用作内核缓存的内存量
  • 第五行:交换区信息(默认单位:mb)

    • 4060.0 total - 交换区总量
    • 3275.2 free - 空闲交换区总量
    • 784.8 used - 使用的交换区总量
    • 775.4 avail Mem - 可用内存

第一行同 uptime 命令,后两行同 free 命令

进程列表

统计信息下方的表格,便是进程列表了,它的各列含义如下:

  • PID - 进程号
  • USER - 用户
  • PR - 优先级(越小越早被执行)
  • NI- 进程 nice 值(-20 到 19,共 40 个值),优先级的调节值,实际优先级 PR(new)=PR(old)+nice
  • VIRT- 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
  • RES - 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
  • SHR - 共享内存大小(与其它进程共享的内存量,单位kb)
  • S - 进程状态:
    • R: Runnable(正在 CPU 上执行 或 运行队列中,准备执行)
    • S: Interruptible sleep(等待事件完成,在统计信息中为 sleeping)
    • D: Uninterruptible sleep(等待一个 I/O 操作完成,在统计信息中为 sleeping)
    • T: Stopped(已被作业控制信号停止,或正被跟踪)
    • Z: Zombie(僵尸进程)
  • %CPU - 上次更新到现在的CPU时间占用百分比(单核 cpu 使用率)
  • %MEM - 物理内存百分比使用率 %MEM=RES/总物理内存
  • TIME+ - 累计占用的 CPU 时间(单位:0.01秒)
  • COMMAND - 命令名(如果要显示全,可按 c 显示)

参数与交互命令

  • top -help - 参数帮助(同 top -v

img-20220628120050.png

运行参数

  • -d - 刷新间隔(单位:秒,默认 3 秒),例如 top -d 1 指定 1 秒刷一次
  • -i - 不显示任何闲置或者僵死进程
  • -s - 安全模式中运行
  • -c - 列 COMMAND 显示整个命令行,例如: img-20220628113624.png
  • -Hp pid 查看某个进程内的线程,例如 img-20220628120225.png
  • -u xxx 只查看某个用户的进程

进程排序

top 命令的界面中,有以下快捷按键对列表进行排序:

  • P - 按 %CPU 排序
  • M - 按 %MEM 排序
  • T - 按 TIME+ 排序
  • N - 按 PID 排序(可查看最新的进程)
  • R - 切换排序方向(默认为 降序

列表过滤

top 命令的界面中,有以下快捷按键对列表进行过滤:

  • u - 输入用户名进行过滤
  • o - 输入过滤表达式进行过滤,例如:
    • COMMAND=java - 进程名包含 java
    • !COMMAND=java - 进程名不包含 java
    • %CPU>0.2 - %CPU 大于 0.2 的
  • = - 清除过滤条件

其它命令

  • - 视角下移(即:列表上移)
  • - 视角上移(即:列表下移)
  • H - 切换到 线程视图,例如: image.png
  • V - 父子进程以树形显示,例如: image.png
  • c - 切换 COMMAND 列显示:命令名/命令行
  • e - 切换 内存统计信息区 与 VIRT | RES | SHR 三列的数据单位
  • k - 杀死指定进程(列表中的第一个进程)
  • s - 修改刷新间隔
  • q - 退出(同 Ctrl + C

交互帮助

当然 top 的交互命令还有很多,进入 top 的界面后,输入 h? 即可以进如帮助页面,如下:

img-20220628114247.png

往期热文