跳转到内容

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

Linux 系统监控与性能调优

💡 为什么需要系统监控? 服务器性能问题往往不是突然出现的,而是逐步积累的。通过持续的系统监控,你可以提前发现性能瓶颈、预测资源需求、快速定位故障,保障业务稳定运行。

本文将带你从 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 是最常用的系统监控命令,实时显示系统整体运行状态:

bash
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 average1/5/15分钟平均负载单核 CPU >1 需关注
us用户空间 CPU 占比持续 >70% 需优化
sy内核空间 CPU 占比持续 >30% 需关注
waI/O 等待占比持续 >20% 说明磁盘瓶颈
idCPU 空闲率<10% 说明 CPU 紧张
st虚拟化偷取时间>5% 说明宿主机过载

top 常用快捷键:

按键功能
1显示每个 CPU 核心使用情况
P按 CPU 使用率排序
M按内存使用率排序
T按运行时间排序
k杀死指定进程
r修改进程优先级
z彩色/黑白切换
c显示完整命令行

2.2 htop - 增强版 top

bash
# Debian/Ubuntu 安装
apt install htop

# CentOS/RHEL 安装
yum install htop

htop 相比 top 的优势:

  • 彩色显示,更直观的 CPU 进度条
  • 支持鼠标操作
  • 横向滚动查看完整命令行
  • 进程树视图(F5)
  • 更友好的进程管理(F9 杀死,F7/F8 调整优先级)

2.3 mpstat - 多处理器统计

bash
# 安装 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.80

2.4 负载均衡分析

理解 load average:

  • 负载值表示等待 CPU 的进程数(包括正在运行的)
  • 单核 CPU:负载 < 0.7 健康,0.7-1.0 需关注,>1.0 过载
  • 多核 CPU:将负载值除以核心数来判断
  • 5分钟和15分钟负载更能反映真实趋势
bash
# 查看 CPU 核心数
nproc

# 计算每核负载
# load_average / cpu_cores

2.5 CPU 性能优化策略

场景优化方向具体措施
用户态 CPU 高优化应用代码性能剖析(perf)、算法优化、减少计算
内核态 CPU 高优化系统调用减少 I/O 操作、优化网络栈
上下文切换频繁减少线程数线程池优化、减少锁竞争
I/O 等待高优化存储升级 SSD、缓存优化、异步 I/O
软中断高优化网络网卡多队列、RPS/RFS、中断绑核

三、内存性能监控

3.1 free 命令

bash
# 人类可读格式显示
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 - 虚拟内存统计

bash
# 每秒采样,共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/Obi块设备读入(块/秒)
I/Obo块设备写出(块/秒)
系统in中断数/秒
系统cs上下文切换/秒

⚠️ 内存瓶颈信号: siso 持续大于 0,说明内存不足,系统频繁使用交换分区。

3.3 进程内存分析

bash
# 查看进程内存占用(按 RSS 排序)
ps aux --sort=-rss | head -20

# 查看指定进程的内存映射
pmap -x <PID>

# 查看进程的内存状态
cat /proc/<PID>/status

3.4 内存优化策略

场景优化措施
物理内存不足增加内存、优化应用内存占用
频繁换页调整 swappiness、减少内存占用
缓存命中率低增加缓存、优化数据访问模式
内存泄漏使用 valgrind/mtrace 定位泄漏点

调整 swappiness:

bash
# 查看当前值
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 统计

bash
# 安装 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 监控

bash
# 安装
apt install iotop

# 运行
iotop

# 只显示有 I/O 活动的进程
iotop -o

4.3 磁盘性能测试

bash
# 测试读取速度
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=direct

4.4 磁盘 I/O 优化策略

优化方向具体措施
硬件升级HDD → SSD、增加磁盘组成 RAID
文件系统选择合适的文件系统(ext4/xfs/btrfs)
挂载参数noatime、data=writeback 等
I/O 调度SSD 用 none/mq-deadline,HDD 用 bfq
应用优化减少随机 I/O、批量写入、使用缓存

查看/修改 I/O 调度器:

bash
# 查看当前调度器
cat /sys/block/vda/queue/scheduler

# 临时修改
echo mq-deadline > /sys/block/vda/queue/scheduler

五、网络性能监控

5.1 ss / netstat - 连接统计

bash
# 查看所有 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 - 实时流量监控

bash
# 安装
apt install iftop nload

# 监控指定网卡流量
iftop -i eth0

# 图形化显示流量
nload eth0

5.3 网络延迟与丢包

bash
# 测试延迟与丢包
ping -c 100 -i 0.2 example.com

# 路由追踪
traceroute example.com

# 使用 mtr 持续测试
mtr --report example.com

5.4 网络性能优化

优化方向措施
TCP 参数调整 tcp_tw_reuse、tcp_fin_timeout
缓冲区调大 net.core.rmem_max、wmem_max
连接数调大文件描述符限制
网卡开启多队列、RSS、中断绑核

常用内核参数优化:

bash
# 编辑 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 - 一站式监控

bash
# 安装
apt install glances

# 运行
glances

# Web 模式(浏览器访问 http://IP:61208)
glances -w

glances 集成了 CPU、内存、磁盘、网络、进程等所有监控指标,界面友好,信息丰富。

6.2 dstat - 全能系统统计

bash
# 安装
apt install dstat

# 综合显示(默认)
dstat

# 显示更多信息
dstat -cdlmnpsy

6.3 sar - 历史数据统计

bash
# sysstat 包自带,需要开启数据收集
# 编辑 /etc/default/sysstat,设置 ENABLED="true"

# 查看当天 CPU 历史
sar -u

# 查看当天内存历史
sar -r

# 查看当天磁盘 I/O
sar -b

# 查看指定日期
sar -u -f /var/log/sysstat/sa28

七、性能瓶颈定位实战

7.1 排查思路

遇到系统慢时,按以下顺序排查:

  1. 整体概览: top / htop / glances 看整体负载
  2. CPU 分析: 负载高是用户态还是内核态?是哪个进程?
  3. 内存分析: 内存够不够?有没有频繁换页?
  4. I/O 分析: 是不是磁盘瓶颈?哪个进程在读写?
  5. 网络分析: 网络带宽够不够?连接数是否正常?

7.2 常见问题定位

场景一:CPU 使用率高

bash
# 1. 找到占用 CPU 高的进程
top  # 按 P 排序

# 2. 查看进程中的线程
top -H -p <PID>

# 3. 用 perf 分析热点函数
perf top -p <PID>

场景二:系统负载高但 CPU 空闲

bash
# 1. vmstat 看是否是 I/O 等待
vmstat 1 5  # 看 wa 列

# 2. iotop 找高 I/O 进程
iotop -o

# 3. iostat 确认磁盘瓶颈
iostat -xz 1 5

场景三:内存不足

bash
# 1. 确认内存使用
free -h

# 2. 看是否有换页
vmstat 1 5  # si/so 列

# 3. 找内存占用高的进程
ps aux --sort=-rss | head -10

八、系统调优实战建议

8.1 通用优化 checklist

8.2 文件描述符优化

bash
# 查看当前限制
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 系统监控与性能调优是运维工程师的核心技能。掌握好四大子系统的监控工具,建立系统化的排查思路,就能快速定位和解决绝大多数性能问题。

关键要点回顾:

  1. 监控先行 - 建立完善的监控体系,而不是出了问题才排查
  2. 数据说话 - 用工具量化性能指标,避免凭感觉调优
  3. 系统思维 - 性能问题往往是多因素的,需要综合分析
  4. 持续优化 - 性能调优是持续迭代的过程,不是一劳永逸

下一篇我们将介绍 crontab 定时任务与自动化运维,学习如何将日常运维工作自动化,进一步提升运维效率。