Linux 系统监控与性能调优实战 2026

💡 为什么需要系统监控? 服务器性能问题往往不是突然出现的,而是逐步积累的。通过持续的系统监控,你可以提前发现性能瓶颈、预测资源需求、快速定位故障,保障业务稳定运行。
本文将带你从 0 到 1 掌握:
- ✅ CPU 性能监控与分析(top / htop / mpstat)
- ✅ 内存使用监控与优化(free / vmstat / sar)
- ✅ 磁盘 I/O 监控与调优(iostat / iotop / hdparm)
- ✅ 网络性能监控与诊断(netstat / ss / iftop / nload)
- ✅ 综合监控工具 glances / dstat
- ✅ 性能瓶颈定位方法论
- ✅ 实战优化策略
一、性能监控基础框架
1.1 四大子系统
Linux 性能监控主要关注四个核心子系统:
| 子系统 | 关键指标 | 常用工具 |
|---|---|---|
| CPU | 使用率、负载、上下文切换、中断 | top, htop, mpstat, vmstat, pidstat |
| 内存 | 使用率、交换分区、缓存、缺页 | free, vmstat, sar, slabtop |
| 磁盘 I/O | 读写速度、IOPS、等待时间、利用率 | iostat, iotop, dstat, hdparm |
| 网络 | 带宽、延迟、丢包、连接数 | ss, netstat, iftop, nload, ping |
1.2 性能分析方法论
问题现象 → 初步排查 → 子系统定位 → 深度分析 → 根因确认 → 优化实施 → 效果验证
↓ ↓ ↓ ↓ ↓ ↓ ↓
用户反馈 top/htop 确认瓶颈 专项工具 定位进程 参数调整 持续监控二、CPU 性能监控
2.1 top 命令详解
top 是最常用的系统监控命令,实时显示系统整体运行状态:
top顶部信息解读:
top - 10:30:45 up 15 days, 3:20, 2 users, load average: 0.85, 0.92, 0.78
Tasks: 128 total, 1 running, 127 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.5 us, 1.2 sy, 0.0 ni, 94.8 id, 0.2 wa, 0.0 hi, 0.3 si, 0.0 st
MiB Mem : 7956.4 total, 1234.5 free, 3456.7 used, 3265.2 buff/cache
MiB Swap: 8192.0 total, 7890.1 free, 301.9 used. 4123.4 avail Mem关键字段说明:
| 字段 | 含义 | 参考阈值 |
|---|---|---|
load average | 1/5/15分钟平均负载 | 单核 CPU >1 需关注 |
us | 用户空间 CPU 占比 | 持续 >70% 需优化 |
sy | 内核空间 CPU 占比 | 持续 >30% 需关注 |
wa | I/O 等待占比 | 持续 >20% 说明磁盘瓶颈 |
id | CPU 空闲率 | <10% 说明 CPU 紧张 |
st | 虚拟化偷取时间 | >5% 说明宿主机过载 |
top 常用快捷键:
| 按键 | 功能 |
|---|---|
1 | 显示每个 CPU 核心使用情况 |
P | 按 CPU 使用率排序 |
M | 按内存使用率排序 |
T | 按运行时间排序 |
k | 杀死指定进程 |
r | 修改进程优先级 |
z | 彩色/黑白切换 |
c | 显示完整命令行 |
2.2 htop - 增强版 top
# Debian/Ubuntu 安装
apt install htop
# CentOS/RHEL 安装
yum install htophtop 相比 top 的优势:
- 彩色显示,更直观的 CPU 进度条
- 支持鼠标操作
- 横向滚动查看完整命令行
- 进程树视图(F5)
- 更友好的进程管理(F9 杀死,F7/F8 调整优先级)
2.3 mpstat - 多处理器统计
# 安装 sysstat 工具包
apt install sysstat
# 查看所有 CPU 核心统计(每秒刷新,共5次)
mpstat -P ALL 1 5
# 查看平均统计
mpstat 1 5输出示例:
Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
Average: all 3.45 0.00 1.18 0.23 0.00 0.32 0.00 0.00 0.00 94.82
Average: 0 2.80 0.00 0.95 0.15 0.00 0.25 0.00 0.00 0.00 95.85
Average: 1 4.10 0.00 1.40 0.30 0.00 0.40 0.00 0.00 0.00 93.802.4 负载均衡分析
理解 load average:
- 负载值表示等待 CPU 的进程数(包括正在运行的)
- 单核 CPU:负载 < 0.7 健康,0.7-1.0 需关注,>1.0 过载
- 多核 CPU:将负载值除以核心数来判断
- 5分钟和15分钟负载更能反映真实趋势
# 查看 CPU 核心数
nproc
# 计算每核负载
# load_average / cpu_cores2.5 CPU 性能优化策略
| 场景 | 优化方向 | 具体措施 |
|---|---|---|
| 用户态 CPU 高 | 优化应用代码 | 性能剖析(perf)、算法优化、减少计算 |
| 内核态 CPU 高 | 优化系统调用 | 减少 I/O 操作、优化网络栈 |
| 上下文切换频繁 | 减少线程数 | 线程池优化、减少锁竞争 |
| I/O 等待高 | 优化存储 | 升级 SSD、缓存优化、异步 I/O |
| 软中断高 | 优化网络 | 网卡多队列、RPS/RFS、中断绑核 |
三、内存性能监控
3.1 free 命令
# 人类可读格式显示
free -h
# 连续观察(每秒刷新)
watch -n 1 free -h输出示例:
total used free shared buff/cache available
Mem: 7.8Gi 3.4Gi 1.2Gi 156Mi 3.2Gi 4.0Gi
Swap: 8.0Gi 301Mi 7.7Gi字段说明:
| 字段 | 含义 |
|---|---|
total | 总内存 |
used | 已使用内存(不含缓存) |
free | 完全空闲的内存 |
buff/cache | 缓冲区和页缓存(可回收) |
available | 实际可用内存(free + 可回收缓存) |
⚠️ 重要概念: Linux 会尽可能多地使用空闲内存作为缓存(buff/cache)来提升性能,所以
free小不代表内存不足,关键看available是否充足。
3.2 vmstat - 虚拟内存统计
# 每秒采样,共10次
vmstat 1 10输出示例:
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 308736 1263688 183456 3156732 0 0 2 15 45 89 3 1 95 0 0关键字段:
| 类别 | 字段 | 含义 |
|---|---|---|
| 进程 | r | 等待运行的进程数(>CPU核数说明CPU瓶颈) |
| 进程 | b | 不可中断睡眠的进程数(通常在等I/O) |
| 内存 | swpd | 已使用的交换空间 |
| 内存 | free | 空闲内存 |
| 交换 | si | 从磁盘换入内存的速度(KB/s) |
| 交换 | so | 从内存换出到磁盘的速度(KB/s) |
| I/O | bi | 块设备读入(块/秒) |
| I/O | bo | 块设备写出(块/秒) |
| 系统 | in | 中断数/秒 |
| 系统 | cs | 上下文切换/秒 |
⚠️ 内存瓶颈信号:
si和so持续大于 0,说明内存不足,系统频繁使用交换分区。
3.3 进程内存分析
# 查看进程内存占用(按 RSS 排序)
ps aux --sort=-rss | head -20
# 查看指定进程的内存映射
pmap -x <PID>
# 查看进程的内存状态
cat /proc/<PID>/status3.4 内存优化策略
| 场景 | 优化措施 |
|---|---|
| 物理内存不足 | 增加内存、优化应用内存占用 |
| 频繁换页 | 调整 swappiness、减少内存占用 |
| 缓存命中率低 | 增加缓存、优化数据访问模式 |
| 内存泄漏 | 使用 valgrind/mtrace 定位泄漏点 |
调整 swappiness:
# 查看当前值
cat /proc/sys/vm/swappiness
# 临时调整(0-100,值越小越不倾向使用swap)
sysctl vm.swappiness=10
# 永久生效
echo 'vm.swappiness=10' >> /etc/sysctl.conf
sysctl -p四、磁盘 I/O 性能监控
4.1 iostat - I/O 统计
# 安装 sysstat(如未安装)
apt install sysstat
# 显示所有磁盘 I/O 统计(每秒刷新,共5次)
iostat -xz 1 5
# 仅显示设备使用率
iostat -d -x -k 1 5输出示例:
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
vda 0.50 2.30 12.50 145.60 0.00 0.80 0.00 25.81 0.80 1.20 0.00 25.00 63.30 0.50 0.14关键字段:
| 字段 | 含义 | 参考阈值 |
|---|---|---|
r/s | 每秒读请求数 | - |
w/s | 每秒写请求数 | - |
rkB/s | 每秒读数据量(KB) | - |
wkB/s | 每秒写数据量(KB) | - |
r_await | 读请求平均等待时间(ms) | >50ms 较慢 |
w_await | 写请求平均等待时间(ms) | >50ms 较慢 |
aqu-sz | 平均请求队列长度 | - |
%util | 设备利用率(繁忙时间占比) | 持续 >80% 说明 I/O 瓶颈 |
4.2 iotop - 进程级 I/O 监控
# 安装
apt install iotop
# 运行
iotop
# 只显示有 I/O 活动的进程
iotop -o4.3 磁盘性能测试
# 测试读取速度
hdparm -Tt /dev/vda
# 使用 dd 测试写速度(注意:会创建测试文件)
dd if=/dev/zero of=/tmp/test bs=1M count=1024 oflag=direct
# 使用 dd 测试读速度
dd if=/tmp/test of=/dev/null bs=1M count=1024 iflag=direct4.4 磁盘 I/O 优化策略
| 优化方向 | 具体措施 |
|---|---|
| 硬件升级 | HDD → SSD、增加磁盘组成 RAID |
| 文件系统 | 选择合适的文件系统(ext4/xfs/btrfs) |
| 挂载参数 | noatime、data=writeback 等 |
| I/O 调度 | SSD 用 none/mq-deadline,HDD 用 bfq |
| 应用优化 | 减少随机 I/O、批量写入、使用缓存 |
查看/修改 I/O 调度器:
# 查看当前调度器
cat /sys/block/vda/queue/scheduler
# 临时修改
echo mq-deadline > /sys/block/vda/queue/scheduler五、网络性能监控
5.1 ss / netstat - 连接统计
# 查看所有 TCP 连接
ss -tulnp
# 查看连接状态统计
ss -s
# 按端口统计连接数
ss -tan | awk '{print $4}' | cut -d: -f2 | sort | uniq -c | sort -rn连接状态说明:
| 状态 | 含义 |
|---|---|
ESTABLISHED | 已建立连接 |
LISTEN | 监听中 |
TIME_WAIT | 等待关闭(主动关闭方) |
CLOSE_WAIT | 等待关闭(被动关闭方) |
SYN_SENT/RECV | 三次握手中 |
⚠️ 注意: 大量
CLOSE_WAIT通常说明应用没有正确关闭连接;大量TIME_WAIT可能需要调整内核参数。
5.2 iftop / nload - 实时流量监控
# 安装
apt install iftop nload
# 监控指定网卡流量
iftop -i eth0
# 图形化显示流量
nload eth05.3 网络延迟与丢包
# 测试延迟与丢包
ping -c 100 -i 0.2 example.com
# 路由追踪
traceroute example.com
# 使用 mtr 持续测试
mtr --report example.com5.4 网络性能优化
| 优化方向 | 措施 |
|---|---|
| TCP 参数 | 调整 tcp_tw_reuse、tcp_fin_timeout |
| 缓冲区 | 调大 net.core.rmem_max、wmem_max |
| 连接数 | 调大文件描述符限制 |
| 网卡 | 开启多队列、RSS、中断绑核 |
常用内核参数优化:
# 编辑 sysctl 配置
cat >> /etc/sysctl.conf << 'EOF'
# TCP 优化
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_max_syn_backlog = 8192
net.core.somaxconn = 65535
# 网络缓冲区
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
EOF
# 生效
sysctl -p六、综合监控工具
6.1 glances - 一站式监控
# 安装
apt install glances
# 运行
glances
# Web 模式(浏览器访问 http://IP:61208)
glances -wglances 集成了 CPU、内存、磁盘、网络、进程等所有监控指标,界面友好,信息丰富。
6.2 dstat - 全能系统统计
# 安装
apt install dstat
# 综合显示(默认)
dstat
# 显示更多信息
dstat -cdlmnpsy6.3 sar - 历史数据统计
# sysstat 包自带,需要开启数据收集
# 编辑 /etc/default/sysstat,设置 ENABLED="true"
# 查看当天 CPU 历史
sar -u
# 查看当天内存历史
sar -r
# 查看当天磁盘 I/O
sar -b
# 查看指定日期
sar -u -f /var/log/sysstat/sa28七、性能瓶颈定位实战
7.1 排查思路
遇到系统慢时,按以下顺序排查:
- 整体概览:
top/htop/glances看整体负载 - CPU 分析: 负载高是用户态还是内核态?是哪个进程?
- 内存分析: 内存够不够?有没有频繁换页?
- I/O 分析: 是不是磁盘瓶颈?哪个进程在读写?
- 网络分析: 网络带宽够不够?连接数是否正常?
7.2 常见问题定位
场景一:CPU 使用率高
# 1. 找到占用 CPU 高的进程
top # 按 P 排序
# 2. 查看进程中的线程
top -H -p <PID>
# 3. 用 perf 分析热点函数
perf top -p <PID>场景二:系统负载高但 CPU 空闲
# 1. vmstat 看是否是 I/O 等待
vmstat 1 5 # 看 wa 列
# 2. iotop 找高 I/O 进程
iotop -o
# 3. iostat 确认磁盘瓶颈
iostat -xz 1 5场景三:内存不足
# 1. 确认内存使用
free -h
# 2. 看是否有换页
vmstat 1 5 # si/so 列
# 3. 找内存占用高的进程
ps aux --sort=-rss | head -10八、系统调优实战建议
8.1 通用优化 checklist
8.2 文件描述符优化
# 查看当前限制
ulimit -n
# 临时调整
ulimit -n 65535
# 永久生效(编辑 /etc/security/limits.conf)
cat >> /etc/security/limits.conf << 'EOF'
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
EOF九、总结
Linux 系统监控与性能调优是运维工程师的核心技能。掌握好四大子系统的监控工具,建立系统化的排查思路,就能快速定位和解决绝大多数性能问题。
关键要点回顾:
- 监控先行 - 建立完善的监控体系,而不是出了问题才排查
- 数据说话 - 用工具量化性能指标,避免凭感觉调优
- 系统思维 - 性能问题往往是多因素的,需要综合分析
- 持续优化 - 性能调优是持续迭代的过程,不是一劳永逸
下一篇我们将介绍 crontab 定时任务与自动化运维,学习如何将日常运维工作自动化,进一步提升运维效率。