系统监控工具指南 / 第3章:htop详解
第3章:htop详解
3.1 htop概述
什么是htop
htop 是 top 的增强版,提供更友好的交互界面和更多功能。它是现代Linux系统管理员的首选进程监控工具。
htop vs top
| 特性 | top | htop |
|---|---|---|
| 界面 | 单色文本 | 彩色图形 |
| 鼠标支持 | 否 | 是 |
| 树状视图 | 基础 | 完整 |
| 横向滚动 | 否 | 是 |
| 多选操作 | 否 | 是(空格标记) |
| 杀进程 | 输入PID和信号 | 直接选择和信号 |
| 配置 | 复杂 | 可视化 |
| 搜索 | 无 | 有 |
| 排序 | 按键切换 | 可视化选择 |
为什么选择htop
- 直观界面 - 彩色显示,信息层次清晰
- 鼠标操作 - 适合新手和桌面环境
- 树状视图 - 清晰展示进程父子关系
- 批量操作 - 支持多选进程
- 高度可定制 - 自定义显示列和布局
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} (线程)
用途:
- 查看进程的父子关系
- 识别服务依赖
- 批量管理相关进程
- 发现异常进程来源
3.6 配置界面(F2)
进入配置
按 F2 或 S 进入配置界面
配置分类
Setup
├── Meters (仪表)
│ ├── Left column
│ └── Right column
├── Display options (显示选项)
├── Colors (颜色方案)
├── Columns (显示列)
└── Header layout (头部布局)
3.6.1 仪表配置(Meters)
添加仪表:
- 按
F2进入设置 - 选择
Meters - 选择
Left column或Right column - 按
Enter添加仪表 - 选择仪表类型
可用仪表:
| 仪表 | 显示内容 |
|---|---|
| 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)
添加/删除列:
- 选择
Columns - 使用
↑↓选择列 - 按
Enter添加到显示列表 - 按
Space从显示列表移除 - 按
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的使用:
- 安装配置: 多种安装方式,配置文件详解
- 界面详解: 头部信息、进程列表、功能键
- 快捷键: 完整的快捷键参考
- 树状视图: 进程父子关系分析
- 配置自定义: 仪表、显示选项、颜色、列配置
- 搜索过滤: 快速定位进程
- 进程管理: 优先级调整、信号发送、批量操作
- 高级功能: 文件查看、系统调用、CPU亲和性
- 实战场景: 常见运维场景应用
htop是日常系统管理的利器,熟练掌握能大幅提高运维效率。
上一章: 第2章:top详解 下一章: 第4章:atop详解