Linux性能监控与调优全攻略
**一、一、性能检测(监控)
**1. CPU1. CPU 监控
命令 | 功能 | 关键参数/输出 | 场景 |
---|---|---|---|
| 实时进程级 |
| 快速定位高 CPU 进 |
| 每个核心的 CPU 使用率 |
| 多核负载均衡分析 |
| 系统负载与运行时间 | 11:32:20 up 3:21, 2 users, load average: 0.00, 0.01, 0.05 | 快速查看负载趋势 |
| 实时 CPU 热点函数分析 | 按函数名排序 CPU 占用率 | 深入代码级 |
说明:
1. top
分类 具体指标 数值 / 说明 系统基本信息 当前时间 11:16:47 开机时长 up 3:05(已开机 3 小时 05 分钟) 登录用户数 2 users 系统平均负载 load average: 0.00, 0.01, 0.05(1 分钟、5 分钟、15 分钟平均负载) 任务(进程)统计 总进程数 226 total 运行中进程数 1 running 休眠进程数 222 sleeping 停止进程数 3 stopped 僵尸进程数 0 zombie CPU 使用率 用户态(us) 0.1%(应用程序占用 CPU 比例) 内核态(sy) 0.1%(系统内核功能占用 CPU 比例) 调整优先级的用户态(ni) 0.0% 空闲(id) 99.8%(空闲 CPU 比例,越高越空闲) 等待 I/O(wa) 0.0%(因等待磁盘、网络等 I/O 操作占用 CPU 耗时比例) 硬件中断(hi) 0.0%(处理硬件中断占用 CPU 耗时比例) 软件中断(si) 0.0%(处理软件中断占用 CPU 耗时比例) 被虚拟机 “偷走”(st) 0.0%(虚拟机场景下,被其他虚拟机占用的 CPU 时间比例) 内存信息 总物理内存(KiB Mem total) 4026372 KiB(约 4GB ) 空闲物理内存(free) 2535540 KiB 已用物理内存(used) 783396 KiB 缓存(buff/cache) 707436 KiB(可被释放给应用的临时缓存) 交换分区信息 总交换分区(KiB Swap total) 4194300 KiB(约 4GB ) 空闲交换分区(free) 4194300 KiB 已用交换分区(used) 0 KiB(未用到磁盘交换,性能较好) 实际可用内存(avail Mem) 2899668 KiB(含可回收缓存,体现实际可用内存) 进程详情 PID(进程 ID) 10463、12545、1、2 等 USER(所属用户) root(所列进程均属 root 用户 ) PR(进程优先级) 20(数值越小优先级越高,所列进程多为 20 ) NI(nice 值) 0(调整进程优先级,范围 -20 ~ 19 ) VIRT(虚拟内存总量) 如 566636 KiB(vmtoolsd 进程)、162012 KiB(top 进程 )等 RES(实际物理内存占用) 如 25912 KiB(vmtoolsd 进程)、2372 KiB(top 进程 )等 SHR(共享内存) 如 19120 KiB(vmtoolsd 进程)、1588 KiB(top 进程 )等 S(进程状态) S(休眠)、R(运行,如 top 进程状态为 R )等 % CPU(进程 CPU 使用率) 如 0.3%(vmtoolsd、top 进程 )、0.0%(systemd 等进程 ) % MEM(进程内存使用率) 如 0.6%(vmtoolsd 进程)、0.1%(top 进程 )、0.2%(systemd 进程 )等 TIME+(累计 CPU 耗时) 如 0:13.54(vmtoolsd 进程)、0:00.02(top 进程 )、0:01.55(systemd 进程 )等 COMMAND(进程名称 / 命令) vmtoolsd、top、systemd、kthreadd 等 2.
mpstat -P ALL 1
列名 全称 / 含义 示例值(以 all
行为例)补充说明 11:27:17 AM
11:27:18 AM
采样时间 采样时间戳 第一行是 “表头时间”,后续是实际采样时间 CPU
CPU 标识:
-all
= 所有 CPU 总览
-0
/1
= 单个 CPU 核心编号all
、0
、1
你的输出里还有 2
、3
核心(截图未完整显示)%usr
用户态 CPU 使用率(应用程序、脚本等用户空间程序占用 CPU 比例) 0.00
数值越高,用户程序越繁忙 %nice
调整过优先级( nice
值)的用户态 CPU 使用率0.00
通常为 0(少用优先级调整时) %sys
内核态 CPU 使用率(系统内核功能、驱动等占用 CPU 比例) 0.25
(all
行)数值高可能因内核任务多(如 I/O 调度) %iowait
CPU 等待 I/O 耗时比例(因磁盘、网络等 I/O 阻塞,CPU 空闲等待的时间) 0.00
高值可能表示存储 / 网络性能瓶颈 %irq
硬件中断(如键盘、磁盘控制器触发)占用 CPU 比例 0.00
通常较低,驱动异常时可能升高 %soft
软件中断(内核内部触发的中断)占用 CPU 比例 0.00
同上,异常时需关注 %steal
虚拟机场景下,被宿主机 “偷走” 的 CPU 时间(仅虚拟机内可见) 0.00
物理机无此损耗,虚拟机需关注 %guest
运行虚拟机客户机(如 KVM 虚机)占用的 CPU 比例 0.00
无虚拟机时通常为 0 %gnice
调整过优先级的虚拟机客户机 CPU 使用率 0.00
同上,少用场景为 0 %idle
CPU 空闲比例(完全无任务时的空闲时间) 99.75
(all
行)
2. 内存监控
命令 | 功能 | 关键参数/输出 | 场景 |
---|---|---|---|
| 内存使用情况(人类可读) |
| **关键指标:关键指标: |
| 内存、进程、I/O 综合统计 |
| 内存不足或 I/O 瓶颈 |
| 内存使用率历史数据 |
| 长 |
1. free -h
分类 字段 含义 & 示例值 补充说明 内存 total
总物理内存: 3.8G
系统总内存约 3.8GB used
已用内存: 765M
实际被程序占用的内存 free
空闲内存: 2.4G
完全未被使用的 “纯空闲” 内存 buff/cache
缓存内存: 690M
用于磁盘缓存(可释放给程序) available
可用内存: 2.8G
程序实际可申请的内存(含可回收缓存) 交换分区 total
总交换空间: 4.0G
硬盘模拟的 “虚拟内存” 总大小 used
已用交换: 0B
未用到交换分区(性能好) free
空闲交换: 4.0G
交换分区剩余空间 总结:系统物理内存充足(总 3.8G,已用仅 765M,可用 2.8G ),且未用到交换分区(Swap 用 0B ),内存状态非常健康,无内存压力~
2. vmstat 1 5
3. sar -r 1 5
3. 磁盘 I/O 监控
命令 | 功能 | 关键参数/输出 | 场景 |
---|---|---|---|
| 磁盘 I/O 性能(扩展模式) |
| 瓶颈判断: |
| 磁盘分区空间使用率 |
| 磁盘空间告 |
1.
iostat -dx 1 5
分类 字段 / 列名 含义 & 示例值 补充说明 磁盘设备 Device
磁盘设备名: scd0
、sda
sda
通常是主硬盘,scd0
可能是光驱I/O 指标 tps
每秒 I/O 操作数: scd0
: 0.00sda
: 0.44数值越高,磁盘越繁忙 kB_read/s
每秒读数据量(kB): scd0
: 0.02sda
: 15.91读吞吐量,反映读性能 kB_wrtn/s
每秒写数据量(kB): scd0
: 0.00sda
: 1.25写吞吐量,反映写性能 累计统计 kB_read
累计读总量(kB): scd0
: 1050sda
: 676095系统启动以来的读总数据量 kB_wrtn
累计写总量(kB): scd0
: 0sda
: 53193系统启动以来的写总数据量 关键结论
sda
(主硬盘):有一定读写活动(tps=0.44
、kB_read/s=15.91
、kB_wrtn/s=1.25
),但整体负载低,属于正常使用状态。scd0
(可能是光驱):读写极少(tps=0.00
、kB_wrtn/s=0.00
),符合光驱低使用场景。
系统磁盘 I/O 压力小,无明显性能瓶颈。
4. 网络监控
命令 | 功能 | 关键参数/输出 | 场景 |
---|---|---|---|
| 网络接口流量统计 |
| 带宽瓶颈或丢包问题 |
| 监听端口与连接状态 |
| 检查服务端口是否正常 |
| 网络协议统计(TCP/UDP/ICMP) |
| 网络层问题分析 |
1.
sar -n DEV 1 5
2.
ss -tuln
3. netstat -s
5. 综合监控工具
工具 | 功能 | 特点 |
---|---|---|
| CPU/内存/磁盘/网络一体化监控 |
|
| 跨平台系统监控(Web/终端) | 支持插件扩展,可监控 Docker、传感器等 |
| 实时性能监控 + 数据导出 | 生成 CSV 报告用于长期分析 |
二、性能调优(优化)
1. CPU 调优
场景 | 调优策略 | 命令/配置 |
---|---|---|
进程 CPU 绑定 | 减少跨 CPU 核心切换开销 |
|
中断亲和性 | 分散网卡中断到不同 CPU 核心 |
|
CPU 频率调节 | 固定高性能模式(省电场景用 |
|
减少上下文切换 | 降低线程数或使用异步 I/O | 优化应用代码(如使用 Nginx 的 |
2. 内存调优
场景 | 调优策略 | 命令/配置 |
---|---|---|
减少 Swap 使用 | 避免内存频繁交换到磁盘(需确保物理内存充足) |
|
调整脏页回写 | 减少磁盘写频率,提升写性能 |
|
启用大页内存 | 减少 TLB Miss(适用于数据库、虚拟化) |
|
OOM Killer 保护 | 防止关键进程被杀 |
|
3. 磁盘 I/O 调优
场景 | 调优策略 | 命令/配置 |
---|---|---|
更换 I/O 调度器 | SSD 用 |
|
调整队列深度 | 提高并发 I/O 能力(SSD 可设 256-1024) |
|
启用读写预取 | 提升顺序读写性能 |
|
文件系统挂载优化 | 禁用访问时间更新、启用写回模式 |
|
4. 网络调优
场景 | 调优策略 | 命令/配置 |
---|---|---|
调整 TCP 缓冲区 | 高带宽或高延迟网络需增大缓冲区 |
|
启用 BBR 拥塞算法 | 提升高丢包网络吞吐量(需内核 ≥4.9) |
|
连接复用 | 减少 TIME_WAIT 连接 |
|
增大连接跟踪表 | 高并发服务器(如 NAT 网关) |
|
三、调优实战案例
场景:Web 服务器响应缓慢
1.监控诊断:
top # 发现 CPU 占用 90%,负载 15(8核机)
vmstat 1 # 显示 r(运行队列)>10,so(Swap Out)>0
free -h # available 内存仅 500MB(总 16GB)
结论:CPU 瓶颈 + 内存不足导致 Swap。
2.调优措施
2.1 应用层
# 优化 Nginx 配置(减少 worker 数)
worker_processes auto;
worker_connections 512; # 原值 1024
# 优化慢 SQL(如添加索引)
EXPLAIN SELECT * FROM users WHERE name='Alice';
2.2 内核层
sysctl vm.swappiness=10 # 减少 Swap
sysctl net.ipv4.tcp_tw_reuse=1 # 复用 TIME_WAIT 连接
硬件:增加内存至 32GB。
3.验证效果
ab -n 10000 -c 100 http://localhost/ # 压力测试
# 结果:TPS 从 200 提升至 800,响应时间从 500ms 降至 120ms
- 安全第一:生产环境调优前 务必备份,
- 单一变量:每次只修改一个参数,避免无法定位问题根源。 3
- 监控先行:调优后持续
sar -u 1 3600
记录 1 小时 CPU)。 4 - 工具选择:
- 快速诊断:`
top
/vmstat
/iostat
- 深度分析:
perf
/eBPF
(bcc-tools
) - 长期
Prometheus + Grafana
- 快速诊断:`
五、命令速查表
目标 | 命令 | 输出关键字 |
---|---|---|
CPU 瓶颈 |
|
|
内存不足 |
|
|
磁盘瓶颈 |
|
|
网络丢包 |
|
|
高负载进程 |
| 第一列高 CPU 进 |
Swap 使用 |
|
|
六,Linux内核版本优化
linux内核优化
升级内核
rpm -ivh kernel-3.10...rpm查看内核模块
/lib/modulesuname -r 查看内核版本
3.10.0-957.el7.x86_64内核版本号由3部分组成
3.10.0-957
主版本号
次版本号:次版本号决定该内核是稳定版本还是开发版本 偶数稳定版本 奇数 开发版本
末版本号(修订版本号)查询模块
lsmod |grep xfs
modinfo xfs加载模块
modprobe ext4卸载模块
modprobe -r ext4开启IP转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1sysctl -p /etc/sysctl.conf
开启禁ping
vim /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_all = 1sysctl -p /etc/sysctl.conf