linux htop命令

提示:htop是一个交互式的实时进程查看器,相比传统的top命令,htop提供了更友好的彩色界面、鼠标支持和直观的操作方式。

命令简介

htop 是Linux系统中一个交互式的进程查看器,可以实时显示系统资源使用情况和运行中的进程信息。与传统的top命令相比,htop提供了彩色显示、垂直和水平滚动、鼠标操作支持、更好的进程信息展示等特性,是系统管理员监控系统性能的利器。

命令语法

htop [选项]

常用选项

选项 说明
-d, --delay=间隔 设置刷新间隔(单位:十分之一秒)
-C, --no-color 使用单色模式
-h, --help 显示帮助信息
-u, --user=用户名 只显示指定用户的进程
-p, --pid=PID,PID... 只显示指定PID的进程
-s, --sort-key 列 按指定列排序(如PID, CPU%, MEM%等)
-t, --tree 以树状结构显示进程
-M, --no-mouse 禁用鼠标支持
-V, --version 显示版本信息
--drop-capabilities[=off] 丢弃特权(安全模式)

htop界面详解

htop界面分为三个主要部分:

  1. 头部信息区:显示系统概览(CPU、内存、交换空间使用率)
  2. 进程列表区:显示所有进程的详细信息
  3. 底部功能区:显示可用的功能键和命令
界面区域 说明 显示内容
CPU使用率条 显示每个CPU核心的使用情况 不同颜色表示用户进程(绿色)、系统进程(红色)、低优先级进程(蓝色)、虚拟化进程(青色)、等待IO进程(黄色)
内存使用率条 显示内存和交换空间使用情况 绿色表示已用内存,蓝色表示缓冲区,黄色表示缓存
进程列表列 显示每个进程的详细信息 PID, USER, PRI, NI, VIRT, RES, SHR, S, CPU%, MEM%, TIME+, Command
状态栏 显示系统运行时间和负载 Uptime, Load average
功能键提示 显示可用的快捷键 F1=Help, F2=Setup, F3=Search, F4=Filter, F5=Tree, F6=SortBy, F7=Nice-, F8=Nice+, F9=Kill, F10=Quit

安装htop

# Ubuntu/Debian 系统
sudo apt-get update
sudo apt-get install htop

# RHEL/CentOS/Fedora 系统
sudo yum install epel-release  # 先安装EPEL仓库
sudo yum install htop

# 或者使用dnf(Fedora/RHEL8+)
sudo dnf install htop

# Arch Linux
sudo pacman -S htop

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

使用示例

示例1:基本使用

启动htop查看系统进程:

# 启动htop(默认设置)
htop

# 以单色模式启动(无颜色)
htop -C

# 设置刷新间隔为2秒
htop -d 20  # 20表示2秒(十分之一秒为单位)

# 以树状结构显示进程
htop -t

# 示例输出(终端中的实际界面):
# 1  [|||                      12.3%]     Tasks: 121, 212 thr; 2 running
# 2  [|                         3.4%]     Load average: 0.05, 0.10, 0.15
#   Mem[|||||||||||||||||   785M/3.85G]   Uptime: 5 days, 03:12:45
#   Swp[                        0K/0K]
#
#   PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
#     1 root       20   0 168M  6.8M  4.8M S  0.0  0.2   0:01.25 systemd
#   456 alice      20   0 410M  148M   32M S  5.6  3.8  12:45.23 gnome-shell
#   789 bob        20   0 210M   48M   18M R 12.3  1.2   3:21.45 chrome
#    ...

示例2:显示特定用户的进程

只显示指定用户的进程:

# 只显示root用户的进程
htop -u root

# 只显示alice用户的进程
htop -u alice

# 也可以启动后按u键选择用户
# 在htop界面中:按u → 选择用户 → 回车

示例3:显示特定进程

只显示指定PID的进程:

# 只显示PID为123和456的进程
htop -p 123,456

# 显示某个进程及其子进程
htop -p $(pgrep -P 1 nginx)  # 显示nginx主进程的所有子进程

# 结合其他命令查找进程
htop -p $(pidof sshd)

示例4:按指定列排序

按特定字段排序进程列表:

# 按CPU使用率降序排序(默认)
htop -s PERCENT_CPU

# 按内存使用率降序排序
htop -s PERCENT_MEM

# 按进程ID排序
htop -s PID

# 按运行时间排序
htop -s TIME

# 常用排序键:
# PERCENT_CPU  - CPU使用率
# PERCENT_MEM  - 内存使用率
# PID          - 进程ID
# TIME         - 运行时间
# USER         - 用户名
# PRIORITY     - 优先级
# NICE         - nice值
# M_SIZE       - 内存大小
# STARTTIME    - 启动时间

示例5:在脚本中使用htop

虽然htop是交互式工具,但也可以在脚本中结合使用:

#!/bin/bash

# 脚本1:监控特定进程
PROCESS_NAME="nginx"
echo "监控进程: $PROCESS_NAME"

# 使用htop查看特定进程
while true; do
    clear
    echo "=== $(date) ==="
    echo ""

    # 获取进程PID
    PIDS=$(pidof $PROCESS_NAME)

    if [ -n "$PIDS" ]; then
        # 使用htop查看这些进程
        htop -p $PIDS -d 5 -C 2>/dev/null || echo "htop未安装或出错"
    else
        echo "进程 $PROCESS_NAME 未运行"
    fi

    sleep 5
done

# 脚本2:生成进程快照
echo "生成进程快照..."
htop -C --no-mouse 2>/dev/null | head -50 > /tmp/process_snapshot_$(date +%Y%m%d_%H%M%S).txt
echo "快照已保存到 /tmp/"

# 脚本3:检查系统负载
echo "检查系统负载..."
echo "当前负载: $(uptime | awk -F'load average:' '{print $2}')"
echo "正在运行htop进行详细查看..."
sleep 2
htop -d 30 -s PERCENT_CPU  # 刷新间隔3秒,按CPU排序

htop快捷键详解

快捷键 功能 说明
F1h 显示帮助 显示所有快捷键的帮助信息
F2S 设置 进入设置界面,可以配置显示选项、颜色主题等
F3/ 搜索进程 按名称搜索进程,按F3继续搜索下一个
F4\ 过滤进程 按条件过滤进程,只显示匹配的进程
F5t 树状视图 以树状结构显示进程层次关系
F6< > 选择排序字段 选择按哪一列排序,<>调整排序顺序
F7] 降低优先级 降低选中进程的nice值(增加优先级)
F8[ 提高优先级 提高选中进程的nice值(降低优先级)
F9k 结束进程 向选中进程发送信号(默认SIGTERM)
F10q 退出 退出htop
Space 标记进程 标记/取消标记进程,用于批量操作
u 显示指定用户 只显示特定用户的进程
P 按CPU排序 按CPU使用率排序
M 按内存排序 按内存使用率排序
T 按时间排序 按运行时间排序
I 反转排序 反转当前排序顺序
Ctrl+F 跟踪进程 显示进程打开的文件和网络连接
l 显示进程打开的文件 使用lsof显示进程打开的文件
s 跟踪系统调用 使用strace跟踪进程的系统调用
H 显示/隐藏用户进程 切换显示用户进程或所有进程
K 显示/隐藏内核线程 切换显示内核线程
Ctrl+L 刷新 刷新屏幕
+- 展开/折叠树 在树状视图中展开或折叠进程树

进程状态说明

状态字符 状态 说明
R 运行中 (Running) 进程正在运行或在运行队列中
S 睡眠中 (Sleeping) 进程在等待事件完成(可中断睡眠)
D 磁盘睡眠 (Disk Sleep) 进程在等待I/O操作(不可中断睡眠)
Z 僵尸进程 (Zombie) 进程已终止但父进程尚未读取其退出状态
T 已停止 (Stopped) 进程被信号停止(如Ctrl+Z)
t 跟踪/调试停止 (Tracing stop) 进程被调试器停止
X 死亡 (Dead) 进程已死亡(不会出现在htop中)
I 空闲 (Idle) 内核线程的空闲状态

内存相关字段说明

字段 说明 单位
VIRT 虚拟内存大小:进程占用的虚拟内存总量 KB, MB, GB
RES 常驻内存大小:进程实际使用的物理内存(不包括交换分区) KB, MB, GB
SHR 共享内存大小:进程使用的共享内存大小 KB, MB, GB
MEM% 内存使用百分比:进程使用的物理内存占总物理内存的百分比 百分比

htop配置文件

htop的配置文件位于~/.config/htop/htoprc,可以自定义设置:

# 查看htop配置文件
cat ~/.config/htop/htoprc

# 编辑配置文件
nano ~/.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
show_program_path=1
highlight_base_name=0
highlight_megabytes=1
highlight_threads=1
tree_view=0
header_margin=1
detailed_cpu_time=0
cpu_count_from_one=0
show_cpu_usage=1
show_cpu_frequency=0
update_process_names=0
account_guest_in_cpu_meter=0
color_scheme=0
delay=15
left_meters=AllCPUs Memory Swap
left_meter_modes=1 1 1
right_meters=Tasks LoadAverage Uptime
right_meter_modes=2 2 2

htop高级用法

1. 进程操作

# 在htop中可进行的进程操作:
# 1. 结束进程:选择进程 → 按F9 → 选择信号 → 回车
#    常用信号:
#     15 (SIGTERM) - 优雅终止(默认)
#     9 (SIGKILL)  - 强制终止
#     1 (SIGHUP)   - 重新加载配置
#     2 (SIGINT)   - 中断(Ctrl+C)
#     3 (SIGQUIT)  - 退出并生成core文件

# 2. 调整进程优先级:
#    提高优先级(更友好多任务):选择进程 → 按F7
#    降低优先级(更多CPU时间):选择进程 → 按F8

# 3. 标记多个进程进行批量操作:
#    选择进程 → 按Space标记 → 对所有标记进程执行操作

# 4. 跟踪进程:
#    选择进程 → 按s键跟踪系统调用
#    选择进程 → 按l键显示打开的文件
#    选择进程 → 按Ctrl+F跟踪文件和网络连接

2. 自定义界面

# 在htop中按F2进入设置界面:
# 1. Meters设置:添加/移除顶部显示的信息栏
#    - Left column: 左侧信息栏
#    - Right column: 右侧信息栏
#    可用选项:CPU, Memory, Swap, Tasks, Load, Uptime等

# 2. Display options:显示选项
#    - Hide kernel threads: 隐藏内核线程
#    - Hide userland process threads: 隐藏用户进程线程
#    - Tree view: 树状视图
#    - Shadow other users' processes: 其他用户进程显示为灰色

# 3. Colors:颜色主题选择
#    - Default: 默认
#    - Monochrome: 单色
#    - Black on white: 黑底白字
#    - Light terminal: 浅色终端
#    - Custom: 自定义

3. 性能监控技巧

# 监控CPU使用率高的进程:
htop -s PERCENT_CPU

# 监控内存使用率高的进程:
htop -s PERCENT_MEM

# 以树状结构查看进程关系(便于查看父进程和子进程):
htop -t

# 监控特定服务的所有进程:
htop -u nginx  # 查看nginx用户的所有进程
# 或
htop -p $(pidof nginx)

# 快速查找进程:
# 在htop中按F3,输入进程名

# 过滤显示特定进程:
# 在htop中按F4,输入过滤条件(如"chrome"显示所有Chrome进程)

htop与top命令比较

特性 htop top
用户界面 彩色界面,直观美观 单色界面,较为简陋
鼠标支持 支持鼠标点击和滚动 不支持鼠标操作
进程操作 可视化操作,菜单驱动 命令行参数操作
树状视图 支持树状显示进程层次 不支持树状视图
垂直滚动 支持垂直和水平滚动 仅支持有限的进程显示
CPU使用显示 图形化显示每个核心使用情况 简单的百分比显示
内存显示 图形化显示内存和交换空间 简单的数字显示
配置 可视化配置界面 需要编辑配置文件或命令行参数
学习曲线 较低,直观易用 较高,需要记忆命令
系统资源占用 相对较高 非常低
普遍性 可能需要单独安装 几乎所有Linux系统默认安装

在脚本中使用htop

#!/bin/bash

# 脚本1:系统监控面板
echo "=== 系统监控面板 ==="
echo "选择监控选项:"
echo "1. 监控CPU使用率高的进程"
echo "2. 监控内存使用率高的进程"
echo "3. 监控特定用户的进程"
echo "4. 树状查看所有进程"
echo "5. 退出"
echo ""

read -p "请输入选项 (1-5): " choice

case $choice in
    1)
        echo "启动htop,按CPU排序..."
        htop -s PERCENT_CPU -d 10
        ;;
    2)
        echo "启动htop,按内存排序..."
        htop -s PERCENT_MEM -d 10
        ;;
    3)
        read -p "请输入用户名: " username
        if id "$username" &>/dev/null; then
            echo "监控用户 $username 的进程..."
            htop -u "$username" -d 10
        else
            echo "用户 $username 不存在"
        fi
        ;;
    4)
        echo "树状查看所有进程..."
        htop -t -d 10
        ;;
    5)
        echo "退出"
        exit 0
        ;;
    *)
        echo "无效选项"
        exit 1
        ;;
esac

# 脚本2:定期生成系统快照
echo ""
echo "开始定期生成系统快照..."

SNAPSHOT_DIR="/tmp/htop_snapshots"
mkdir -p "$SNAPSHOT_DIR"

for i in {1..5}; do
    echo "生成快照 $i/5..."
    TIMESTAMP=$(date +%Y%m%d_%H%M%S)
    htop -C --no-mouse 2>/dev/null | head -100 > "$SNAPSHOT_DIR/snapshot_${TIMESTAMP}.txt"

    # 提取关键信息
    echo "=== 系统状态 ===" >> "$SNAPSHOT_DIR/summary_${TIMESTAMP}.txt"
    echo "时间: $(date)" >> "$SNAPSHOT_DIR/summary_${TIMESTAMP}.txt"
    echo "" >> "$SNAPSHOT_DIR/summary_${TIMESTAMP}.txt"

    # 获取前5个CPU使用率高的进程
    echo "CPU使用率前5的进程:" >> "$SNAPSHOT_DIR/summary_${TIMESTAMP}.txt"
    htop -C --no-mouse 2>/dev/null | grep -E "^ *[0-9]+ " | head -5 >> "$SNAPSHOT_DIR/summary_${TIMESTAMP}.txt"
    echo "" >> "$SNAPSHOT_DIR/summary_${TIMESTAMP}.txt"

    # 获取前5个内存使用率高的进程
    echo "内存使用率前5的进程:" >> "$SNAPSHOT_DIR/summary_${TIMESTAMP}.txt"
    htop -C -s PERCENT_MEM --no-mouse 2>/dev/null | grep -E "^ *[0-9]+ " | head -5 >> "$SNAPSHOT_DIR/summary_${TIMESTAMP}.txt"

    echo "快照 $i 已保存"

    if [ $i -lt 5 ]; then
        sleep 10  # 等待10秒
    fi
done

echo "所有快照已保存到 $SNAPSHOT_DIR"

# 脚本3:进程监控和告警
echo ""
echo "进程监控告警系统"

# 监控的进程列表
MONITOR_PROCESSES=("nginx" "mysql" "redis-server")

for PROC in "${MONITOR_PROCESSES[@]}"; do
    echo "检查进程: $PROC"

    # 检查进程是否运行
    if ! pgrep -x "$PROC" >/dev/null; then
        echo "警告: $PROC 未运行!"
        # 这里可以添加发送告警的逻辑
    else
        # 检查进程资源使用
        PID=$(pgrep -x "$PROC" | head -1)
        if [ -n "$PID" ]; then
            CPU_USAGE=$(ps -p "$PID" -o %cpu --no-headers)
            MEM_USAGE=$(ps -p "$PID" -o %mem --no-headers)

            echo "  PID: $PID, CPU: ${CPU_USAGE}%, MEM: ${MEM_USAGE}%"

            # 如果CPU使用率超过阈值,告警
            if (( $(echo "$CPU_USAGE > 80.0" | bc -l) )); then
                echo "  ⚠️  CPU使用率过高: ${CPU_USAGE}%"
            fi

            # 如果内存使用率超过阈值,告警
            if (( $(echo "$MEM_USAGE > 50.0" | bc -l) )); then
                echo "  ⚠️ 内存使用率过高: ${MEM_USAGE}%"
            fi
        fi
    fi
    echo ""
done

echo "监控完成,启动htop查看详细信息..."
sleep 2
htop -d 15

注意事项

  1. htop需要ncurses库支持,如果终端不支持颜色或特定字符,可能显示异常
  2. 在慢速网络连接或高延迟SSH会话中,htop的响应可能会变慢
  3. htop显示的是实时数据,刷新间隔设置过短会增加系统负载
  4. 某些Linux发行版可能需要从第三方仓库安装htop
  5. htop的功能键可能与终端模拟器的快捷键冲突(如F10可能用于菜单)
  6. 在容器环境中,htop可能无法准确显示所有进程信息
  7. htop的某些高级功能(如跟踪系统调用)需要相应工具(strace)支持
  8. 配置文件~/.config/htop/htoprc可能因版本不同而格式有差异
  9. 使用htop结束进程时要谨慎,特别是系统关键进程

故障排查

# 1. htop命令不存在
# 检查是否安装
which htop
# 安装(参考前面的安装部分)

# 2. 显示乱码或颜色异常
# 检查终端类型
echo $TERM
# 设置正确的终端类型
export TERM=xterm-256color

# 检查ncurses库
ldd $(which htop) | grep curses

# 使用单色模式
htop -C

# 3. 鼠标支持异常
# 禁用鼠标支持
htop -M

# 4. 刷新太慢或太快
# 调整刷新间隔
htop -d 30  # 3秒刷新一次

# 5. 无法显示所有进程
# 检查权限(某些进程需要root权限查看)
sudo htop

# 或者以root身份运行
sudo -i
htop

# 6. 功能键无效
# 检查终端模拟器设置,确保功能键发送正确
# 尝试使用替代键(如q代替F10退出)

# 7. 树状视图显示异常
# 确保使用最新版本
htop --version
# 更新到最新版本

# 8. 配置文件问题
# 删除配置文件重新生成
rm ~/.config/htop/htoprc
htop  # 重新启动生成新配置

# 9. 内存显示不准确
# 检查系统内存信息
free -h
cat /proc/meminfo

# 10. 进程统计不准确
# 检查进程数量
ps aux | wc -l
# 与htop显示的Tasks数量比较

相关命令

  • top - 传统的进程查看器
  • ps - 显示当前进程状态
  • pstree - 以树状结构显示进程
  • vmstat - 显示虚拟内存统计
  • mpstat - 显示每个CPU的使用情况
  • iostat - 显示CPU和I/O统计
  • sar - 系统活动报告工具
  • glances - 另一个高级系统监控工具
  • btop - htop的现代化替代品
  • nmon - 性能监控工具
  • lsof - 列出打开的文件(htop中按l键使用)
  • strace - 跟踪系统调用(htop中按s键使用)