强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

系统监控工具指南 / 第3章:htop详解

第3章:htop详解

3.1 htop概述

什么是htop

htoptop 的增强版,提供更友好的交互界面和更多功能。它是现代Linux系统管理员的首选进程监控工具。

htop vs top

特性 top htop
界面 单色文本 彩色图形
鼠标支持
树状视图 基础 完整
横向滚动
多选操作 是(空格标记)
杀进程 输入PID和信号 直接选择和信号
配置 复杂 可视化
搜索
排序 按键切换 可视化选择

为什么选择htop

  1. 直观界面 - 彩色显示,信息层次清晰
  2. 鼠标操作 - 适合新手和桌面环境
  3. 树状视图 - 清晰展示进程父子关系
  4. 批量操作 - 支持多选进程
  5. 高度可定制 - 自定义显示列和布局

3.2 安装与配置

安装方法

# Debian/Ubuntu
sudo apt update
sudo apt install htop

# CentOS/RHEL
sudo yum install epel-release
sudo yum install htop

# Fedora
sudo dnf install htop

# Arch Linux
sudo pacman -S htop

# macOS
brew install htop

# 从源码编译
wget https://github.com/htop-dev/htop/archive/refs/tags/3.2.2.tar.gz
tar xzf 3.2.2.tar.gz
cd htop-3.2.2
./autogen.sh
./configure
make
sudo make install

验证安装

htop --version
# htop 3.2.2

配置文件

htop的配置文件位置:

~/.config/htop/htoprc    # 用户级配置
/etc/htoprc              # 系统级配置

手动编辑配置:

# 备份原配置
cp ~/.config/htop/htoprc ~/.config/htop/htoprc.bak

# 编辑配置
nano ~/.config/htop/htoprc

3.3 界面详解

整体布局

┌─────────────────────────────────────────────────────────────────┐
│  CPU[|||||||||||||||||||||||||||||||||||||||| 95%]   Tasks: 215  │
│  Mem[||||||||||||||||||||||||||||||||      62%]   Load: 0.52    │
│  Swp[                                         0%]   Uptime: 10d │
├─────────────────────────────────────────────────────────────────┤
│  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  │
│ 1234 root       20   0  512M  65M   12M S  5.0  0.4  1:23.45  │
│ 5678 mysql      20   0 1.2G   234M  23M S  3.2  1.4 12:34.56  │
│ ...                                                             │
├─────────────────────────────────────────────────────────────────┤
│  F1Help F2Setup F3Search F4Filter F5Tree F6Sort F7Nice F8Nice+ │
└─────────────────────────────────────────────────────────────────┘

头部信息区

CPU显示区

CPU[|||||||||||||||||||||||||||||||||||||||| 95%]
│   │   │   │   │   │   │   │
│   └───┴───┴───┴───┴───┴───┘
│   每个竖线代表一个CPU核心
│   颜色含义:
│   绿色 = 用户空间
│   蓝色 = 低优先级
│   红色 = 系统空间
└── 总体使用率

配置CPU显示:

# 进入htop后
# F2 → Display options → Detailed CPU time (勾选)
# 可以看到us/sy/ni/hi/si等详细分类

内存显示区

Mem[||||||||||||||||||||||||||||||||      62%]
│   │   │   │   │   │
│   └───┴───┴───┴───┘
│   颜色含义:
│   绿色 = 已使用
│   蓝色 = 缓冲
│   橙色 = 缓存
└── 使用率

Swap显示区

Swp[                                         0%]
│
│   颜色含义:
│   红色 = 已使用
└── 使用率(理想情况应为0%)

进程列表区

字段 含义 说明
PID 进程ID 唯一标识
USER 用户 进程所有者
PRI 优先级 内核优先级
NI nice值 用户可调整的优先级
VIRT 虚拟内存 申请的总内存
RES 常驻内存 实际物理内存
SHR 共享内存 与其他进程共享
S 状态 R/S/D/Z/T
CPU% CPU使用率
MEM% 内存使用率
TIME+ CPU时间 累计CPU使用
Command 命令 启动命令

功能键栏

按键 功能 说明
F1 Help 帮助信息
F2 Setup 配置界面
F3 Search 搜索进程
F4 Filter 过滤进程
F5 Tree 树状视图
F6 Sort 选择排序列
F7 Nice - 降低优先级
F8 Nice + 提高优先级
F9 Kill 发送信号
F10 Quit 退出

3.4 快捷键大全

基本操作

快捷键 功能
F1 / h 帮助
F2 / S 设置
F3 / / 搜索
F4 / \ 过滤
F5 / t 树状视图
F6 / < / > 选择排序列
F7 / [ 提高优先级(nice值减小)
F8 / ] 降低优先级(nice值增大)
F9 / k 发送信号
F10 / q 退出

导航操作

快捷键 功能
/ 上下移动
/ 左右滚动
Home / End 跳到首/尾
Page Up / Page Down 翻页
Space 标记/取消标记进程
U 取消所有标记

视图操作

快捷键 功能
H 显示/隐藏用户线程
K 显示/隐藏内核线程
u 按用户过滤
p 显示完整路径
t 树状视图
T 累计时间显示
I 切换IRIX模式
F 跟踪进程(保持选中)
L 显示打开的文件
s 显示系统调用

进程管理

快捷键 功能
F9 / k 发送信号
空格 标记进程
F7 / [ 提高优先级
F8 / ] 降低优先级
c 标记子进程
i 设置IO优先级

显示选项

快捷键 功能
a 设置CPU亲和性
e 显示环境变量
l 显示打开的文件
s 显示系统调用
F 跟踪进程

3.5 树状视图

启用树状视图

# 方法1:按F5
# 方法2:按t
# 方法3:启动时指定
htop -t

树状视图示例

    PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
      1 root       20   0  169M   13M  8480 S  0.0  0.1  0:03.45 └─ systemd
    567 root       20   0   24M   9M   6543 S  0.0  0.1  0:01.23    ├─ systemd-journal
    678 root       20   0   28M   12M  8765 S  0.0  0.1  0:00.45    ├─ systemd-udevd
   1234 www-data   20   0  512M   65M  12M  S  0.5  0.4  1:23.45    ├─ nginx───2*[nginx]
   5678 mysql      20   0  1.2G  234M  23M  S  3.2  1.4 12:34.56    └─ mysqld───15*[{mysqld}]

树状视图操作

快捷键 功能
F5 / t 切换树状视图
F6 / > 展开/折叠子树
Space 折叠/展开当前节点
c 标记所有子进程

理解进程树

systemd (PID 1)
├── systemd-journald (日志服务)
├── systemd-udevd (设备管理)
├── nginx (Web服务器)
│   ├── nginx (worker进程)
│   └── nginx (worker进程)
└── mysqld (数据库)
    └── {mysqld} (线程)

用途:

  1. 查看进程的父子关系
  2. 识别服务依赖
  3. 批量管理相关进程
  4. 发现异常进程来源

3.6 配置界面(F2)

进入配置

F2S 进入配置界面

配置分类

Setup
├── Meters (仪表)
│   ├── Left column
│   └── Right column
├── Display options (显示选项)
├── Colors (颜色方案)
├── Columns (显示列)
└── Header layout (头部布局)

3.6.1 仪表配置(Meters)

添加仪表:

  1. F2 进入设置
  2. 选择 Meters
  3. 选择 Left columnRight column
  4. Enter 添加仪表
  5. 选择仪表类型

可用仪表:

仪表 显示内容
CPU CPU使用率
Memory 内存使用率
Swap 交换分区使用
Load 系统负载
Uptime 运行时间
Tasks 任务数量
Battery 电池状态
Hostname 主机名
Clock 时钟
System 系统信息
Disk I/O 磁盘IO
Network 网络流量

仪表样式:

样式 显示方式
Bar 进度条
Graph 图形
LED LED风格
Text 文本

3.6.2 显示选项(Display Options)

主要选项:

选项 说明
Tree view 默认树状视图
Shadow other users’ processes 高亮其他用户进程
Hide kernel threads 隐藏内核线程
Hide userland threads 隐藏用户线程
Display threads in a different color 线程用不同颜色
Highlight base name 高亮命令基本名
Highlight new and old processes 高亮新旧进程
Display thread using a different color 线程颜色区分
Show custom thread names 显示自定义线程名
Show program path 显示程序路径
Highlight program “basename” 高亮程序名
Highlight large numbers in memory/cpu 高亮大数值
Detailed CPU time 详细CPU时间(显示us/sy/ni等)
Count CPUs from 0 instead of 1 CPU编号从0开始
Update process names on every refresh 每次刷新更新进程名
Add timestamp to SIGUSR1 添加时间戳到SIGUSR1

3.6.3 颜色方案(Colors)

预设方案:

方案 描述
Default 默认颜色
Broken Gray 灰色方案
Midnight 午夜蓝
Black Night 黑夜
White Night 白夜
Bamboo 竹子绿
Red Hat 红帽红
Green 绿色方案
Blue 蓝色方案

3.6.4 显示列配置(Columns)

添加/删除列:

  1. 选择 Columns
  2. 使用 ↑↓ 选择列
  3. Enter 添加到显示列表
  4. Space 从显示列表移除
  5. F5 调整顺序

可用列分类:

分类 包含列
PID Process ID, Parent PID
USER User, UID
PRIORITY Priority, Nice, Realtime priority
VIRTUAL Virtual memory, Resident memory, Shared memory
STATE State, Process name
PERCENT_CPU CPU%, Nice
PERCENT_MEM Memory%
TIME Start time, Time+
COMM Command, Command line
IO IO read rate, IO write rate
NETWORK Network RX, Network TX

3.7 搜索与过滤

搜索进程(F3)

# 按F3或/进入搜索模式
# 输入搜索关键词
# 按Enter确认
# 按F3查找下一个
# 按F3+Shift查找上一个

过滤进程(F4)

# 按F4或\进入过滤模式
# 输入过滤条件
# 只显示匹配的进程
# 再次按F4清除过滤

按用户过滤

# 按u键
# 从列表中选择用户
# 只显示该用户的进程
# 再次按u清除过滤

过滤示例

# 只显示nginx进程
# 按F4 → 输入nginx

# 只显示root用户进程
# 按u → 选择root

# 只显示mysql用户进程
# 按u → 选择mysql

3.8 进程管理

选择进程

# 单选
↑↓移动选择

# 多选
空格标记/取消标记

# 标记子进程
c

# 取消所有选择
U

调整优先级

# 提高优先级(需要root权限)
# 选择进程 → 按F7或[
# nice值减小,优先级提高

# 降低优先级
# 选择进程 → 按F8或]
# nice值增大,优先级降低

# 注意:
# 普通用户只能降低优先级(增大nice值)
# root用户可以任意调整

发送信号

# 按F9或k
# 出现信号选择菜单

常用信号:

信号 编号 作用 使用场景
SIGTERM 15 优雅终止 正常停止服务
SIGKILL 9 强制杀死 进程无响应
SIGHUP 1 重新加载 重新读取配置
SIGSTOP 19 暂停 临时暂停进程
SIGCONT 18 继续 恢复暂停的进程
SIGUSR1 10 用户自定义 应用特定功能
SIGUSR2 12 用户自定义 应用特定功能

批量操作

# 1. 标记多个进程
# 空格键标记每个进程

# 2. 或者使用c标记子进程
# 选择父进程 → 按c

# 3. 执行操作
# F9发送信号(会应用到所有标记的进程)
# F7/F8调整优先级

3.9 高级功能

3.9.1 跟踪进程

# 按F键
# 当前选中的进程会保持高亮
# 即使进程位置变化也能跟踪
# 适合监控特定进程的变化

3.9.2 查看打开文件

# 选择进程 → 按l
# 显示该进程打开的所有文件
# 包括普通文件、socket、pipe等

示例输出:

COMMAND  PID  USER   FD   TYPE  DEVICE  SIZE/OFF  NODE  NAME
nginx   1234  root  cwd   DIR   253,0      4096     2  /
nginx   1234  root    0r  CHR     1,3        0t0     6  /dev/null
nginx   1234  root    1w  REG   253,0     12345  1234  /var/log/nginx/access.log
nginx   1234  root    3u  IPv4  12345      0t0   TCP  *:80 (LISTEN)

3.9.3 查看系统调用

# 选择进程 → 按s
# 使用strace跟踪系统调用
# 显示进程的系统调用活动

3.9.4 查看环境变量

# 选择进程 → 按e
# 显示进程的环境变量

示例输出:

HOME=/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
LANG=en_US.UTF-8

3.9.5 设置CPU亲和性

# 选择进程 → 按a
# 选择进程可以使用的CPU核心
# 用于控制进程在特定核心上运行

使用场景:

  • 绑定关键进程到特定CPU核心
  • 隔离进程以减少上下文切换
  • NUMA架构优化

3.9.6 IO优先级

# 选择进程 → 按i
# 设置IO调度优先级

IO优先级:

类别 级别 说明
Realtime 0-7 最高优先级
Best-effort 0-7 默认,公平调度
Idle - 最低优先级,只在空闲时运行

3.10 自定义配置

3.10.1 保存配置

# 在htop界面按F2进入设置
# 修改完成后
# 按F10退出
# 配置自动保存到 ~/.config/htop/htoprc

3.10.2 手动编辑配置

# 编辑配置文件
nano ~/.config/htop/htoprc

配置文件示例:

# ~/.config/htop/htoprc
# 显示列配置
fields=0 48 17 18 38 39 40 2 46 47 49 1
sort_key=46
sort_direction=1
hide_threads=0
hide_kernel_threads=1
hide_userland_threads=0
shadow_other_users=0
show_thread_names=0
highlight_base_name=1
highlight_megabytes=1
highlight_changes=0
highlight_changes_delay_secs=5
find_comm_in_cmdline=1
strip_exe_from_cmdline=1
show_merged_command=0
tree_view=1
tree_sort_key=46
tree_sort_direction=1
tree_view_always_by_pid=0
all_branches_collapsed=0
# 仪表配置
left_meters=LeftCPUs Memory Swap
left_meter_modes=1 1 1
right_meters=RightCPUs Tasks LoadAverage Uptime
right_meter_modes=1 2 2 2
# 颜色方案
color_scheme=6

3.10.3 推荐配置

运维人员推荐配置:

# 显示更多有用的列
fields=0 48 17 18 38 39 40 2 46 47 49 111 1 146

# 显示详细CPU时间
detailed_cpu_time=1

# 树状视图
tree_view=1

# 隐藏内核线程
hide_kernel_threads=1

# 高亮大数字
highlight_megabytes=1

3.11 命令行参数

常用参数

# 基本用法
htop

# 启用树状视图
htop -t

# 按指定列排序
htop --sort-key=PERCENT_CPU

# 只显示指定用户
htop -u username

# 延迟更新(秒)
htop -d 10

# 只显示指定PID
htop -p 1234,5678

# 指定配置文件
htop --config=/path/to/htoprc

排序键

# 可用的排序键
htop --sort-key help

# 常用排序
htop --sort-key=PERCENT_CPU      # 按CPU
htop --sort-key=PERCENT_MEM      # 按内存
htop --sort-key=PID              # 按PID
htop --sort-key=TIME             # 按CPU时间
htop --sort-key=USER             # 按用户

批处理模式

# 输出一次后退出(类似top -bn1)
htop --no-color | head -30

# 输出到文件
htop --no-color > htop_output.txt

3.12 实用场景

场景1:找出CPU消耗最高的进程

# 启动htop
htop

# 按F6选择排序列
# 选择PERCENT_CPU
# 或直接按< >切换排序列

场景2:找出内存泄漏进程

# 启动htop
htop

# 按F6选择PERCENT_MEM排序
# 观察内存使用率持续增长的进程
# 使用F键跟踪该进程

场景3:分析进程树

# 启动htop
htop -t

# 展开/折叠子树
# 空格键折叠/展开

# 查看进程依赖关系
# 识别服务的父子进程

场景4:批量杀死僵尸进程

# 1. 启动htop
htop

# 2. 按F4过滤
# 输入Z(或zombie)

# 3. 标记所有僵尸进程
# 空格键逐个标记

# 4. 发送信号
# F9 → 选择SIGKILL

场景5:监控特定服务

# 方法1:过滤
htop
# F4 → 输入nginx

# 方法2:命令行
htop -p $(pgrep nginx | tr '\n' ',')

# 方法3:跟踪模式
# 选择nginx主进程
# 按F进入跟踪模式

场景6:调整进程优先级

# 1. 找到目标进程
htop
# 搜索或过滤找到进程

# 2. 提高优先级(降低nice值)
# 选择进程 → F7(需要root权限)

# 3. 或降低优先级
# 选择进程 → F8

# 4. 验证
# 查看NI列的变化

3.13 故障排查

问题1:htop启动慢

可能原因:

  • 进程数量过多
  • NFS挂载点问题

解决方案:

# 使用延迟启动
htop -d 5

# 只显示特定用户
htop -u root

# 检查NFS挂载
mount | grep nfs

问题2:显示不正常

可能原因:

  • 终端不支持颜色
  • 配置文件损坏

解决方案:

# 无颜色模式
htop --no-color

# 重置配置
rm ~/.config/htop/htoprc

问题3:无法杀死进程

可能原因:

  • 权限不足
  • 进程是僵尸状态
  • 进程处于D状态

解决方案:

# 使用sudo
sudo htop

# 检查进程状态
ps aux | grep <PID>

# 僵尸进程需要杀死父进程
# D状态进程可能需要重启

3.14 htop脚本化

获取htop输出

# 无颜色输出
htop --no-color | head -30

# 输出到文件
htop --no-color > output.txt

# 使用script录制
script -c htop htop_session.log

监控脚本集成

#!/bin/bash
# 使用htop数据进行监控

# 获取CPU占用最高的进程
get_top_cpu() {
    htop --no-color --sort-key=PERCENT_CPU | \
    awk 'NR>7 && NF>0 {print $9, $12}' | head -5
}

# 获取内存占用最高的进程
get_top_mem() {
    htop --no-color --sort-key=PERCENT_MEM | \
    awk 'NR>7 && NF>0 {print $10, $12}' | head -5
}

echo "=== Top CPU ==="
get_top_cpu

echo "=== Top Memory ==="
get_top_mem

3.15 与其他工具集成

htop + strace

# 在htop中选择进程
# 按s调用strace

# 或者手动
strace -p $(htop --no-color | awk 'NR==8{print $1}')

htop + lsof

# 在htop中选择进程
# 按l查看打开的文件

# 或者手动
lsof -p $(htop --no-color | awk 'NR==8{print $1}')

htop + gdb

# 获取进程PID
PID=$(htop --no-color | awk 'NR==8{print $1}')

# 使用gdb调试
gdb -p $PID

3.16 扩展阅读

3.17 快捷键速查卡

┌─────────────────────────────────────────────────┐
│              htop 快捷键速查卡                    │
├─────────────────────────────────────────────────┤
│  导航        │  操作        │  视图              │
│  ↑↓ 上下     │  空格 标记   │  F5/t 树状视图     │
│  ←→ 左右     │  F9/k 信号   │  H   显示线程      │
│  PgUp/PgDn  │  F7/[ 提权   │  K   内核线程      │
│  Home/End   │  F8/] 降权   │  p   完整路径      │
├─────────────────────────────────────────────────┤
│  搜索        │  过滤        │  设置              │
│  F3// 搜索   │  F4/\ 过滤   │  F2/S 设置        │
│  n   下一个  │  u   用户    │  F10 退出         │
└─────────────────────────────────────────────────┘

3.18 本章小结

本章详细介绍了htop的使用:

  1. 安装配置: 多种安装方式,配置文件详解
  2. 界面详解: 头部信息、进程列表、功能键
  3. 快捷键: 完整的快捷键参考
  4. 树状视图: 进程父子关系分析
  5. 配置自定义: 仪表、显示选项、颜色、列配置
  6. 搜索过滤: 快速定位进程
  7. 进程管理: 优先级调整、信号发送、批量操作
  8. 高级功能: 文件查看、系统调用、CPU亲和性
  9. 实战场景: 常见运维场景应用

htop是日常系统管理的利器,熟练掌握能大幅提高运维效率。


上一章: 第2章:top详解 下一章: 第4章:atop详解