一、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
八、性能问题排查流程
- 检查系统负载 -
uptime 或 top
- 检查 CPU -
top 看%CPU,vmstat 看 us/sy/wa
- 检查内存 -
free -h 看 available,vmstat 看 si/so
- 检查磁盘 I/O -
iostat -x 看%util 和 await
- 检查磁盘空间 -
df -h 和 du -sh /*
- 检查网络 -
ss -tun 看连接数,iftop 看带宽
- 定位进程 -
htop、iotop、nethogs
💡 快速诊断命令:
# 一键查看系统状态
top -bn1 | head -20
free -h
df -h
echo "Load: $(uptime)"
⚠️ 告警阈值参考:
- CPU 负载 > CPU 核心数 × 2
- 内存使用率 > 90%
- 磁盘使用率 > 85%
- 磁盘%util > 80%
- iowait > 20%