📊 Linux 系统监控命令

top / htop / vmstat / iostat 完全指南 · 2026-04-12

一、CPU 监控

1.1 top 命令 - 实时进程监控

$ top top - 15:30:45 up 10 days, 2:30, 1 user, load average: 0.52, 0.83, 0.78 Tasks: 142 total, 1 running, 141 sleeping, 0 stopped, 0 zombie %Cpu(s): 12.5 us, 3.2 sy, 0.0 ni, 83.8 id, 0.5 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 7976.3 total, 1234.5 free, 3456.7 used, 3285.1 buff/cache MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 4519.6 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1234 mysql 20 0 1234567 890123 12345 S 12.5 8.9 10:23.45 mysqld 5678 www-data 20 0 234567 123456 6789 S 3.2 1.5 2:34.56 nginx
关键指标解读:
  • load average: 系统负载(1/5/15 分钟平均值),超过 CPU 核心数表示过载
  • us (user): 用户空间 CPU 使用率
  • sy (system): 内核空间 CPU 使用率
  • id (idle): 空闲 CPU 百分比
  • wa (iowait): 等待 I/O 的 CPU 时间(高表示磁盘瓶颈)
  • st (stolen): 虚拟机被宿主机偷取的时间
# top 交互命令 M # 按内存排序 P # 按 CPU 排序 1 # 显示所有 CPU 核心 c # 显示完整命令路径 k # 终止进程(输入 PID) q # 退出 # 批处理模式(适合脚本) top -b -n 1 # 输出一次后退出 top -b -n 5 > top.log # 输出 5 次到文件

1.2 htop - 增强版 top

# 安装 yum install htop -y apt install htop -y # 运行 htop # 交互命令 F1 # 帮助 F2 # 设置 F3 # 搜索进程 F4 # 过滤进程 F6 # 选择排序列 F9 # 终止进程 F10 # 退出 鼠标点击 # 可直接操作
💡 htop 优势:
  • 彩色显示,更直观
  • 支持鼠标操作
  • 可横向滚动查看完整命令
  • 可视化 CPU/内存使用条

二、内存监控

2.1 free 命令

$ free -h total used free shared buff/cache available Mem: 7.8Gi 3.4Gi 1.2Gi 234Mi 3.2Gi 4.4Gi Swap: 2.0Gi 0B 2.0Gi # 常用选项 free -h # 人类可读格式(自动单位) free -m # MB 为单位 free -g # GB 为单位 free -t # 显示总计行 free -s 2 # 每 2 秒刷新一次
关键指标:
  • total: 总物理内存
  • used: 已使用内存(含 buffer/cache)
  • free: 完全未使用内存
  • buff/cache: 缓冲区 + 缓存(可回收)
  • available: 可用内存(最重要!包含可回收的 cache)
⚠️ 注意:Linux 会充分利用空闲内存做 cache,所以 free 少不代表内存不足,要看 available

2.2 vmstat - 虚拟内存统计

$ vmstat 2 5 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 123456 234567 345678 0 0 12 34 123 456 12 3 84 1 0 ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ r b swpd free buff cache si so bi bo in cs us sy id wa st
# 列含义 procs: r - 运行队列(>CPU 核心数表示过载) b - 阻塞进程数 memory: swpd - 已用交换空间 free - 空闲内存 buff - 缓冲区 cache - 缓存 swap: si - 从磁盘读入交换空间 so - 写入磁盘交换空间 io: bi - 读入块(blocks in) bo - 写出块(blocks out) system: in - 中断数 cs - 上下文切换数 cpu: us - 用户时间 sy - 系统时间 id - 空闲 wa - I/O 等待 st - 偷取时间 # 常用命令 vmstat 2 # 每 2 秒刷新 vmstat 2 10 # 每 2 秒,共 10 次 vmstat -t 1 # 显示时间戳 vmstat -s # 显示内存统计摘要

三、磁盘 I/O 监控

3.1 iostat - I/O 统计

# 安装(属于 sysstat 包) yum install sysstat -y apt install sysstat -y # 运行 $ iostat -x 2 3 Linux 5.4.0-42-generic (server) 04/12/2026 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 12.34 0.01 3.45 1.23 0.00 82.97 Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %util await r_await w_await sda 5.67 8.90 123.45 678.90 0.12 1.23 12.34 2.34 1.23 3.45 sdb 0.12 0.34 5.67 12.34 0.00 0.01 1.23 0.45 0.23 0.67
# 关键指标 r/s, w/s - 每秒读/写次数 rkB/s, wkB/s - 每秒读/写数据量(KB) %util - 设备利用率(>80% 表示瓶颈) await - I/O 平均等待时间(ms) r_await - 读平均等待 w_await - 写平均等待 # 常用命令 iostat -x 2 # 扩展模式,每 2 秒刷新 iostat -d 2 # 仅显示设备 iostat -c 2 # 仅显示 CPU iostat -x /dev/sda # 监控特定设备

3.2 iotop - 进程级 I/O 监控

# 安装 yum install iotop -y apt install iotop -y # 运行(需要 root) sudo iotop # 选项 iotop -o # 仅显示有 I/O 的进程 iotop -P # 仅显示进程(不显示线程) iotop -a # 显示累计 I/O iotop -b -n 5 # 批处理模式,5 次后退出

四、磁盘空间监控

4.1 df - 磁盘空间

$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 28G 20G 59% / /dev/sdb1 500G 234G 240G 50% /data tmpfs 3.9G 0 3.9G 0% /dev/shm # 常用选项 df -h # 人类可读 df -i # inode 使用率 df -T # 显示文件系统类型 df -x tmpfs # 排除 tmpfs

4.2 du - 目录大小

# 查看目录大小 du -sh /var/log/ # 单个目录总大小 du -sh /* # 根目录下各目录大小 du -sh /home/* # 各用户目录大小 # 详细列表 du -h --max-depth=1 / # 根目录一级子目录 du -h --max-depth=2 /var # /var 下两级目录 # 查找大文件 du -ah /var | sort -rh | head -10 # 最大 10 个文件 find / -type f -size +100M -exec ls -lh {} \; # 大于 100M 的文件
💡 清理日志:
# 清空日志文件(不删除文件) > /var/log/syslog truncate -s 0 /var/log/nginx/access.log # 删除旧日志 find /var/log -name "*.log" -mtime +30 -delete

五、网络监控

5.1 ss / netstat - 连接监控

# 监听端口(推荐 ss) ss -tuln netstat -tuln # 所有连接 ss -tun netstat -tun # 统计信息 ss -s netstat -s # 查找特定端口 ss -tunlp | grep :80 netstat -tunlp | grep :80 # 选项含义 -t TCP 连接 -u UDP 连接 -l 监听状态 -n 数字显示(不解析域名) -p 显示进程名

5.2 iftop - 实时带宽监控

# 安装 yum install iftop -y apt install iftop -y # 运行(需要 root) sudo iftop sudo iftop -i eth0 # 指定网卡 # 显示 P1/P2/P3 - 1/2/3 秒平均带宽 T/T1/T2 - 切换时间显示 n - 切换域名解析 q - 退出

5.3 nethogs - 进程级网络监控

# 安装 yum install nethogs -y apt install nethogs -y # 运行 sudo nethogs sudo nethogs eth0 # 指定网卡 # 显示每个进程的网络带宽占用

六、综合监控工具

6.1 dstat - 全能监控

# 安装 yum install dstat -y apt install dstat -y # 运行 dstat # 默认显示 dstat -cdngy # CPU+ 磁盘 + 网络 + 分页 + 系统 dstat --top-cpu # 显示最耗 CPU 进程 dstat --top-mem # 显示最耗内存进程 dstat --top-io # 显示最耗 I/O 进程

6.2 glances - 系统监控仪表盘

# 安装 pip install glances # 或 yum install glances -y apt install glances -y # 运行 glances # 本地运行 glances -w # Web 模式(浏览器访问) glances -s # 服务器模式 glances -c @host # 客户端模式

七、监控脚本示例

7.1 系统健康检查脚本

#!/bin/bash # system-health-check.sh echo "=== 系统健康检查 ===" echo "时间:$(date)" echo "" # CPU 负载 echo "📊 CPU 负载:" uptime echo "" # 内存使用 echo "💾 内存使用:" free -h echo "" # 磁盘使用 echo "💿 磁盘使用:" df -h / echo "" # 关键服务 echo "🔧 关键服务:" systemctl is-active nginx systemctl is-active mysql echo "" # 最近登录 echo "👤 最近登录:" last -5 echo "" # 告警检查 LOAD=$(uptime | awk -F'load average:' '{print $2}' | cut -d, -f1 | tr -d ' ') if (( $(echo "$LOAD > 4" | bc -l) )); then echo "⚠️ 警告:CPU 负载过高 ($LOAD)" fi MEM_USED=$(free | grep Mem | awk '{print $3/$2 * 100.0}') if (( $(echo "$MEM_USED > 90" | bc -l) )); then echo "⚠️ 警告:内存使用率过高 ($MEM_USED%)" fi

7.2 定时监控(cron)

# 每 5 分钟记录系统状态 */5 * * * * /usr/bin/vmstat 1 1 >> /var/log/vmstat.log # 每小时记录磁盘使用 0 * * * * /bin/df -h >> /var/log/disk.log # 每天生成监控报告 0 8 * * * /root/system-health-check.sh > /var/log/health-$(date +\%Y\%m\%d).log

八、性能问题排查流程

  1. 检查系统负载 - uptimetop
  2. 检查 CPU - top 看%CPU,vmstat 看 us/sy/wa
  3. 检查内存 - free -h 看 available,vmstat 看 si/so
  4. 检查磁盘 I/O - iostat -x 看%util 和 await
  5. 检查磁盘空间 - df -hdu -sh /*
  6. 检查网络 - ss -tun 看连接数,iftop 看带宽
  7. 定位进程 - htopiotopnethogs
💡 快速诊断命令:
# 一键查看系统状态 top -bn1 | head -20 free -h df -h echo "Load: $(uptime)"
⚠️ 告警阈值参考:
  • CPU 负载 > CPU 核心数 × 2
  • 内存使用率 > 90%
  • 磁盘使用率 > 85%
  • 磁盘%util > 80%
  • iowait > 20%
← 返回首页