blj28

导航

top 命令使用时使用快捷键可以修改部分视图——相关技巧(shift +v 树状图显示)

 

如果只需静态查看某个进程的线程列表:ps -T -p <PID>

 

(1)top 命令开启后小写的h 显示帮助_

Help for Interactive Commands - procps-ng 3.3.16
Window 1:Def: Cumulative mode Off.  System: Delay 3.0 secs; Secure mode Off.

  Z,B,E,e   Global: 'Z' colors; 'B' bold; 'E'/'e' summary/task memory scale
  l,t,m     Toggle Summary: 'l' load avg; 't' task/cpu stats; 'm' memory info
  0,1,2,3,I Toggle: '0' zeros; '1/2/3' cpus or numa node views; 'I' Irix mode
  f,F,X     Fields: 'f'/'F' add/remove/order/sort; 'X' increase fixed-width

  L,&,<,> . Locate: 'L'/'&' find/again; Move sort column: '<'/'>' left/right
  R,H,J,C . Toggle: 'R' Sort; 'H' Threads; 'J' Num justify; 'C' Coordinates
  c,i,S,j . Toggle: 'c' Cmd name/line; 'i' Idle; 'S' Time; 'j' Str justify
  x,y     . Toggle highlights: 'x' sort field; 'y' running tasks
  z,b     . Toggle: 'z' color/mono; 'b' bold/reverse (only if 'x' or 'y')
  u,U,o,O . Filter by: 'u'/'U' effective/any user; 'o'/'O' other criteria
  n,#,^O  . Set: 'n'/'#' max tasks displayed; Show: Ctrl+'O' other filter(s)
  V,v     . Toggle: 'V' forest view; 'v' hide/show forest view children

  k,r       操作进程:'k' 杀死;'r' 设置优先级
  d or s    设定更新间隔
  W,Y       Write configuration file 'W'; Inspect other output 'Y'
  q         Quit
          ( commands shown with '.' require a visible task display window ) 
Press 'h' or '?' for help with Windows,
Type 'q' or <Esc> to continue 

top 命令(procps-ng 3.3.16 版本)交互式帮助的解析和翻译。它将帮助信息分门别类,以便于理解。

全局概览

  • 程序名称: top (来自 procps-ng 软件包,版本 3.3.16)

  • 运行模式: 常规模式(非累计模式)。累计模式会显示进程自启动以来的总 CPU 时间,而非相对上一刷新周期的增量。

  • 刷新间隔: 3.0 秒

  • 安全模式: 关闭。这意味着一些危险命令(如 k 杀死进程)是可用的。


命令分类解析

1. 全局显示设置 (影响整个界面)

快捷键功能描述
Z 循环切换颜色主题方案。
B 切换是否使用粗体显示。
E / e 摘要信息内存单位缩放:在屏幕顶部的系统摘要信息(内存、交换空间)中,使用 E (大写) 循环切换单位(KiB, MiB, GiB...);使用 e (小写) 在任务区的内存信息列中循环切换单位。
z 切换彩色或单色显示模式。
b 切换粗体或反显(仅当高亮功能 x 或 y 开启时有效)。
0 (零) 切换是否在数字显示中隐藏零点(使显示更紧凑)。

2. 摘要信息区切换 (屏幕顶部)

快捷键功能描述
l 切换显示/隐藏 系统平均负载 (Load Average) 行。
t 切换显示 任务和 CPU 状态 的格式(数字/条形图/完全隐藏)。
m 切换显示 内存和交换空间使用情况 的格式(数字/条形图/完全隐藏)。
1 (数字1) 切换显示 所有 CPU 的总体状态 还是 每个逻辑 CPU 的单独状态。
1

3. 任务显示区字段管理

快捷键功能描述
f / F 字段管理:进入一个界面,可以添加、移除 任务显示区中的信息列,或改变列的顺序和排序依据。这是最强大的自定义功能之一。
X 增加固定宽度:扩大“命令”列或其他固定宽度列的显示宽度,以便看到更长的内容。
c 切换显示 进程的命令行名称 或 完整的命令行。
i 切换显示/隐藏 空闲进程(即显示所有进程还是只显示活跃进程)。
S 切换 累计时间模式:显示进程自启动以来的总 CPU 时间,还是最近一个刷新周期内使用的 CPU 时间。
J 切换任务区中数字数据的数字对齐方式(右对齐或左对齐)。
j 切换任务区中文本数据的文本对齐方式(左对齐或右对齐)。
C 切换显示/隐藏 CPU 坐标信息(对于了解进程在哪个 CPU 核心上运行很有用)。

4. 排序、定位与搜索

快捷键功能描述
< / > 移动排序列:将当前的高亮排序字段向左 (<) 或向右 (>) 移动,从而改变排序依据。
R 切换正常/反向排序。
L / & 定位进程:按 L 后输入一个字符串来查找匹配的进程;按 & 可以继续查找下一个匹配项。
x 高亮显示当前排序所依据的列。
y 高亮显示当前正在运行的进程。

5. 视图与过滤

快捷键功能描述
V 切换树状视图(森林视图),以层级结构显示进程父子关系。
v 在树状视图下,折叠或展开选中进程的子进程。
u / U 按用户过滤:按 u 或 U 后输入用户名,u 过滤有效用户,U 过滤任意用户(真实、有效、保存等)。
o / O 按其他条件过滤:允许您设置复杂的过滤器(例如 CPU>10.0 显示 CPU 使用率大于 10% 的进程)。o 是大小写敏感的,O 是不敏感的。
n / # 设置最大任务显示数量:按 n 或 # 后输入一个数字,限制界面中显示的任务行数。
Ctrl + O 显示当前活动的过滤器。
H 切换显示线程还是进程。开启后,将显示所有线程,而不只是进程的汇总信息。
I 切换 Irix 模式 与 Solaris 模式。这影响 CPU 使用率的计算方式:Irix 模式下,多核 CPU 的总使用率可能超过 100%;Solaris 模式下,总会按 100% 归一化。

6. 进程操作 (需要权限)

快捷键功能描述
k 杀死进程:选择一个进程后按 k,输入信号(默认为 15 SIGTERM),即可向该进程发送终止信号。
r 重新设置优先级 (Nice值):选择一个进程后按 r,输入新的 Nice 值(通常 -20 到 19,值越低优先级越高),即可改变其调度优先级。

7. 系统与控制

快捷键功能描述
d 或 s 改变刷新间隔延迟:输入一个新的时间(如 2.5 或 10),单位是秒。
W 将当前配置写入文件 (~/.toprc)。这样下次启动 top 时会保持本次的所有设置。
Y 检查其他进程的输出:类似于 ps 命令的功能,可以查看指定进程的详细信息。
q 或 Esc 退出 top 程序。

重要提示

  • 帮助信息底部括号中的说明 ( commands shown with '.' require a visible task display window ) 意思是:所有在帮助列表中前面带有一个点 . 的命令(在此解析中已用 . 标出),都需要任务显示窗口处于可见状态(即没有被隐藏)才能使用。 例如,如果按 t 和 m 隐藏了顶部摘要信息,那么任务显示区就是唯一的窗口,这些命令依然有效。

  • 按下 h 或 ? 可以再次调出此帮助界面。

  • 按 q 或 Esc 键可以退出帮助并返回 top 主界面。

 

2 实际应用%Cpu(s)显示内容

image

 2.1 %CPU各列含义

%Cpu0  :  0.3 us,  2.0 sy,  0.0 ni, 97.0 id,  0.0 wa,  0.0 hi,  0.7 si,  0.0 st
%Cpu1  :  0.3 us,  2.7 sy,  0.0 ni, 96.7 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
%Cpu2  :  0.7 us,  1.7 sy,  0.0 ni, 97.0 id,  0.0 wa,  0.0 hi,  0.7 si,  0.0 st
%Cpu3  :  0.0 us,  1.0 sy,  0.0 ni, 98.3 id,  0.0 wa,  0.0 hi,  0.7 si,  0.0 st

这是 top 命令中 CPU 状态行的详细解释。

这一行显示了 CPU 时间的总体使用情况,所有值的百分比总和为 100%。

格式:
%Cpu(s): us, sy, ni, id, wa, hi, si, st


各列含义详解

缩写全称含义解释
us user 用户空间进程占用 CPU 的百分比。这是运行普通用户应用程序(非内核程序)所花费的 CPU 时间。如果这个值长期过高,表示用户应用程序消耗了大量 CPU 资源。
sy system 内核空间进程占用 CPU 的百分比。这是运行系统内核进程所花费的 CPU 时间。例如,执行系统调用(I/O 操作、进程创建等)。较高的 sy 值可能表示系统在进行大量的内核操作,或者存在频繁的上下文切换。
ni nice 被调整过优先级(niced)的用户进程占用 CPU 的百分比。Nice 值允许影响进程的调度优先级。这里的 CPU 时间是指那些被赋予了积极 Nice 值(优先级调低)的进程所消耗的。
id idle CPU 空闲时间的百分比。这是 CPU 没有执行任何任务的时间比例。这个值越高,说明 CPU 越空闲。你提供的例子中 id=99.4%,表明系统 CPU 压力非常小。
wa I/O wait CPU 等待 I/O 操作完成的时间百分比。当 CPU 需要的数据还在磁盘、网络等慢速设备上读写时,它必须停下来等待。这个值过高通常表示磁盘或网络 I/O 存在瓶颈,成为了系统性能的限制因素。
hi hardware interrupts 处理硬件中断所花费的 CPU 时间百分比。硬件中断由硬件设备(如硬盘、网卡、键盘)发出,以通知 CPU 某个事件(如数据已就绪)需要立即处理。
si software interrupts 处理软件中断所花费的 CPU 时间百分比。软件中断由软件程序触发,通常用于处理任务调度、系统时钟等。在虚拟化环境中,这也可能包括处理来自其他虚拟机的中断。
st steal time 被虚拟化程序(Hypervisor)“偷走”的 CPU 时间百分比。这个指标仅出现在虚拟机和云主机中。它表示你的虚拟机准备运行,但由于 Hypervisor 正在为其他虚拟机(或主机本身)提供服务,你的虚拟机无法获得物理 CPU 时间。如果这个值持续很高,说明你的虚拟机正在和宿主机上的其他虚拟机激烈争夺 CPU 资源,性能会受到影响。

如何快速解读?

    1. 看整体繁忙程度:主要看 id (空闲)。100% - id% = CPU 总使用率

      • 你的例子:100% - 99.4% = 0.6%,CPU 使用率极低,系统非常空闲。

    2. 看瓶颈类型:

      • CPU 瓶颈:如果 us 和 sy 很高,而 id 很低,说明计算是瓶颈。

      • I/O 瓶颈:如果 wa 值很高(例如持续超过 20%),说明存储或网络速度跟不上,CPU 经常在等待。

      • 虚拟化环境问题:如果 st 值很高,说明物理主机资源不足,你需要联系云服务提供商或系统管理员。

    3. 看中断压力:通常 hi 和 si 的值都很低。如果它们异常高,可能表示有硬件问题或内核驱动存在问题。

2.2 进程号这一行各列的含义

进程号 USER      PR  NI    VIRT    RES    SHR    %CPU  %MEM     TIME+ COMMAND

这是对 top 命令输出中进程信息各列的详细解释。

列标题含义与全称详细解释
PID 进程ID (Process ID) 操作系统分配给每个进程的唯一标识号。用于指定和管理特定进程(例如用 kill 命令终止进程)。
USER 用户名 (User Name) 启动此进程的用户账户名。表明该进程由哪个用户拥有。
PR 优先级 (Priority) 进程的调度优先级。由 Linux 内核动态管理,值越小,优先级越高,越容易被调度执行。用户通常无法直接修改。
NI NICE值 (Nice Value) 用户可调整的优先级修正值。范围通常为 -20 到 19。负值: 提高优先级(对系统进程不推荐)。0: 默认优先级。正值: 降低优先级(让出 CPU 时间)。您可以使用 r 命令来修改此值。
VIRT 虚拟内存 (Virtual Memory Size) 进程占用的总虚拟内存大小。包括进程实际使用的内存、映射的文件、以及共享库等。VIRT = RES + SWAP + 共享库 + ... 这个值可能很大,但不代表实际消耗了那么多物理内存。
RES 常驻内存 (Resident Memory Size) 进程当前使用的、未被换出的物理内存大小(单位通常是 KiB 或 MB)。这是判断一个进程真实内存占用的关键指标RES 是 SHR 的一部分。
SHR 共享内存 (Shared Memory Size) RES 中可以被其他进程共享的内存部分。例如,共享库(如 libc.so)只需要在物理内存中加载一次,多个使用它的进程可以共享。
%CPU CPU 使用率 (CPU Usage) 进程自上一次更新以来占用 CPU 的时间百分比。在多核系统中,这个值可以超过 100%。例如,一个进程完全占用了 2 个核心,其 %CPU 会显示为 200%。
%MEM 内存使用率 (Memory Usage) 进程当前使用的物理内存 (RES) 占系统总物理内存的百分比。这是衡量进程内存占用的另一个直观指标
TIME+ CPU 时间 (CPU Time) 进程自启动以来总共使用的 CPU 时间,精确到百分之一秒。格式为 分:秒.百分秒。与 %CPU(瞬时率)不同,这是累积值。
COMMAND 命令名/行 (Command) 启动此进程的命令名称。如果按下 c 键切换后,则会显示完整的命令行及其参数。

如何快速解读与应用?

  1. 找资源消耗大户:

    • 按 %CPU 排序(按 P 键):快速找到最耗 CPU 的进程。

    • 按 %MEM 排序(按 M 键):快速找到最耗内存的进程。

  2. 判断内存占用:

    • 不要只看 VIRT,它很大是正常的。关键看 RES,它才是进程实际占用的物理内存。

    • SHR 是共享部分,如果多个进程都依赖同一个共享库,这块内存不会被重复计算。

  3. 调整进程优先级:

    • 如果你想让某个不重要的大计算量进程跑得慢一点,不影响其他任务,可以用 r 命令将其 NI 值调高(例如设为 10 或 15)。

    • 如果你想提高某个进程的优先级(需 root 权限),可以将其 NI 值设为负数(例如 -5)。

  4. 识别进程:

    • 通过 COMMAND 列可以知道某个进程具体是哪个程序。结合 USER 列可以判断是系统进程还是用户进程。

如果一个进程的 RES 很高,同时 %MEM 也很高,说明它是导致系统内存紧张的主要原因。如果它的 %CPU 持续为 100%,说明它正在全力进行计算,可能是导致系统卡顿的元凶。这时你就可以根据 PID 来决定是否要终止 (k) 或调整其优先级 (r)。

 

Linux 中 htop 可见但 /proc 下无对应线程目录的原因

在 Linux 中,htop 显示的线程确实在 /proc 文件系统中存在,但它们不是以独立文件夹的形式直接出现在 /proc 根目录下。

原因分析

  1. 线程在 /proc 中的组织方式:

    • 线程信息存储在 /proc/<pid>/task/<tid>/ 目录中

    • <pid> 是进程 ID,<tid> 是线程 ID

    • 主线程的目录直接显示为 /proc/<pid>/(因为主线程的 tid = pid)

  2. 查看线程信息的方法:

    bash
     
    # 查找进程ID
    ps aux | grep <process-name>
    
    # 查看该进程的所有线程
    ls /proc/<pid>/task/
    
    # 查看特定线程的详细信息
    cat /proc/<pid>/task/<tid>/status

示例说明

假设有一个多线程进程(如 Nginx),其进程 ID 为 1234,包含多个线程:

text
 
/proc/1234/           # 主线程目录
/proc/1234/task/1234/ # 也是主线程
/proc/1234/task/1235/ # 第一个工作线程
/proc/1234/task/1236/ # 第二个工作线程

额外信息

  • 使用 htop 时按 H 键可以显示线程而不是进程

  • 使用 ps -eLf 命令也可以查看所有线程

  • /proc 文件系统是虚拟文件系统,内容在内存中动态生成

这种设计保持了进程与线程的层次关系,避免了 /proc 目录过于杂乱。

 

2.3 当 top 命令没有以树状结构显示线程或子线程未正确显示时

# 以线程模式启动 top top -H # 或者启动后按 H 键切换线程视图

 

 3、实际应用

分析 netstat 输出结果

从您的输出可以看到,有两个与 492 相关的套接字连接:

text
 
unix  2      [ ]         DGRAM                    13492    992/sshd: invt [pri
unix  3      [ ]         STREAM     CONNECTED     8134     492/bash

输出解释

  1. 第一个连接:

    • 类型:UNIX 域数据报套接字 (DGRAM)

    • 状态:无特定状态 ([ ])

    • Inode 号:13492

    • 进程:PID 992,进程名为 sshd: invt [pri] (SSH 守护进程的一个实例)

  2. 第二个连接:

    • 类型:UNIX 域流套接字 (STREAM)

    • 状态:已连接 (CONNECTED)

    • Inode 号:8134

    • 进程:PID 492,进程名为 bash (一个 Bash shell)

进一步查看进程 492 的详细信息

bash
 
# 查看进程 492 的详细信息
ps -p 492 -f

# 查看进程 492 打开的所有文件描述符(包括套接字)
sudo ls -l /proc/492/fd/

# 查看进程 492 的网络连接情况
sudo lsof -p 492 -i

查看特定 inode 的套接字信息

bash
 
# 查看 inode 8134 的详细信息(与 bash 进程相关的套接字)
sudo find /proc -inum 8134 2>/dev/null

# 查看 inode 13492 的详细信息(与 sshd 进程相关的套接字)
sudo find /proc -inum 13492 2>/dev/null

使用 ss 命令查看更详细的套接字信息

 
# 查看所有 UNIX 域套接字
sudo ss -xap

# 筛选与进程 492 相关的套接字
sudo ss -xap | grep 492

# 查看特定 inode 的套接字
sudo ss -xap | grep "13492\|8134"

理解 UNIX 域套接字

UNIX 域套接字是一种进程间通信(IPC)机制,用于在同一台机器上的进程之间通信。它们比网络套接字更高效,因为数据不需要经过网络协议栈。

  • DGRAM:数据报套接字,提供无连接、不可靠的消息传递

  • STREAM:流套接字,提供面向连接的、可靠的字节流通信

在您的输出中,bash 进程 (PID 492) 通过 STREAM 类型的 UNIX 域套接字与另一个进程通信,而 SSH 守护进程 (PID 992) 使用 DGRAM 类型的 UNIX 域套接字。

这些套接字通常用于进程间通信,例如 shell 与终端之间的通信,或者 SSH 客户端与服务器之间的通信。

posted on 2025-08-22 16:57  bailinjun  阅读(21)  评论(0)    收藏  举报