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

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

第3章:htop详解

3.1 htop概述

什么是htop

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

htop vs top

特性tophtop
界面单色文本彩色图形
鼠标支持
树状视图基础完整
横向滚动
多选操作是(空格标记)
杀进程输入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优先级内核优先级
NInice值用户可调整的优先级
VIRT虚拟内存申请的总内存
RES常驻内存实际物理内存
SHR共享内存与其他进程共享
S状态R/S/D/Z/T
CPU%CPU使用率
MEM%内存使用率
TIME+CPU时间累计CPU使用
Command命令启动命令

功能键栏

按键功能说明
F1Help帮助信息
F2Setup配置界面
F3Search搜索进程
F4Filter过滤进程
F5Tree树状视图
F6Sort选择排序列
F7Nice -降低优先级
F8Nice +提高优先级
F9Kill发送信号
F10Quit退出

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. 选择仪表类型

可用仪表:

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

仪表样式:

样式显示方式
Bar进度条
Graph图形
LEDLED风格
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 1CPU编号从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 调整顺序

可用列分类:

分类包含列
PIDProcess ID, Parent PID
USERUser, UID
PRIORITYPriority, Nice, Realtime priority
VIRTUALVirtual memory, Resident memory, Shared memory
STATEState, Process name
PERCENT_CPUCPU%, Nice
PERCENT_MEMMemory%
TIMEStart time, Time+
COMMCommand, Command line
IOIO read rate, IO write rate
NETWORKNetwork 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
# 出现信号选择菜单

常用信号:

信号编号作用使用场景
SIGTERM15优雅终止正常停止服务
SIGKILL9强制杀死进程无响应
SIGHUP1重新加载重新读取配置
SIGSTOP19暂停临时暂停进程
SIGCONT18继续恢复暂停的进程
SIGUSR110用户自定义应用特定功能
SIGUSR212用户自定义应用特定功能

批量操作

# 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优先级:

类别级别说明
Realtime0-7最高优先级
Best-effort0-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详解