系列导读:本篇将深入讲解系统性能瓶颈的分析方法与优化策略。
文章目录
-
- 目录
- 一、性能指标
-
- [1.1 核心指标](#1.1 核心指标)
- [1.2 性能公式](#1.2 性能公式)
- 二、瓶颈分析方法
-
- [2.1 分析工具](#2.1 分析工具)
- [2.2 分析流程](#2.2 分析流程)
- [三、CPU 瓶颈优化](#三、CPU 瓶颈优化)
-
- [3.1 CPU 飙高分析](#3.1 CPU 飙高分析)
- [3.2 优化策略](#3.2 优化策略)
- [3.3 代码示例](#3.3 代码示例)
- 四、内存瓶颈优化
-
- [4.1 内存分析](#4.1 内存分析)
- [4.2 优化策略](#4.2 优化策略)
- [五、IO 瓶颈优化](#五、IO 瓶颈优化)
-
- [5.1 IO 分析](#5.1 IO 分析)
- [5.2 优化策略](#5.2 优化策略)
- [5.3 代码示例](#5.3 代码示例)
- 总结
目录
一、性能指标
1.1 核心指标
| 指标 | 说明 | 优秀标准 |
|---|---|---|
| QPS | 每秒查询数 | > 10000 |
| RT | 响应时间 | < 100ms |
| CPU | CPU 使用率 | < 70% |
| 内存 | 内存使用率 | < 80% |
| IO | IO 等待 | < 10% |
1.2 性能公式
QPS = 并发数 / 平均响应时间
响应时间 = CPU时间 + 等待时间
系统吞吐量 = 线程数 × (1 / 平均响应时间)
二、瓶颈分析方法
2.1 分析工具
| 工具 | 说明 |
|---|---|
| top | CPU、内存监控 |
| vmstat | 系统统计 |
| iostat | IO 统计 |
| netstat | 网络统计 |
| perf | 性能分析 |
| flamegraph | 火焰图 |
2.2 分析流程
1. 监控发现异常
↓
2. 定位瓶颈资源(CPU/内存/IO/网络)
↓
3. 分析具体原因
↓
4. 制定优化方案
↓
5. 验证优化效果
三、CPU 瓶颈优化
3.1 CPU 飙高分析
bash
# 查看 CPU 使用
top -H -p <pid>
# 查看线程栈
jstack <pid> > thread.log
# 生成火焰图
perf record -g -p <pid>
perf script | stackcollapse-perf.pl | flamegraph.pl > cpu.svg
3.2 优化策略
CPU 优化方向:
1. 算法优化:降低时间复杂度
2. 减少锁竞争:使用并发工具
3. 异步处理:非阻塞 IO
4. 缓存:减少计算
5. 并行处理:多线程/多进程
3.3 代码示例
java
// 优化前:同步阻塞
public Result process(Request request) {
Result result = new Result();
result.setData1(service1.call(request));
result.setData2(service2.call(request));
result.setData3(service3.call(request));
return result;
}
// 优化后:并行处理
public Result process(Request request) {
CompletableFuture<String> f1 = CompletableFuture.supplyAsync(
() -> service1.call(request));
CompletableFuture<String> f2 = CompletableFuture.supplyAsync(
() -> service2.call(request));
CompletableFuture<String> f3 = CompletableFuture.supplyAsync(
() -> service3.call(request));
CompletableFuture.allOf(f1, f2, f3).join();
Result result = new Result();
result.setData1(f1.join());
result.setData2(f2.join());
result.setData3(f3.join());
return result;
}
四、内存瓶颈优化
4.1 内存分析
bash
# 查看内存使用
free -m
# 查看进程内存
pmap -x <pid>
# JVM 内存分析
jmap -heap <pid>
jmap -histo <pid> | head -20
4.2 优化策略
内存优化方向:
1. 对象复用:对象池
2. 减少对象创建:StringBuilder
3. 及时释放:置 null
4. 合理设置 JVM 参数
5. 使用堆外内存
五、IO 瓶颈优化
5.1 IO 分析
bash
# 查看 IO 状态
iostat -x 1
# 查看磁盘使用
df -h
# 查看文件打开数
lsof -p <pid> | wc -l
5.2 优化策略
IO 优化方向:
1. 缓存:Redis、本地缓存
2. 批量操作:减少 IO 次数
3. 异步写入:消息队列
4. 压缩:减少传输量
5. SSD:提升硬件性能
5.3 代码示例
java
// 优化前:单条插入
for (Order order : orders) {
orderMapper.insert(order);
}
// 优化后:批量插入
orderMapper.batchInsert(orders);
总结
✅ 性能指标 :QPS、RT、CPU、内存、IO
✅ 分析方法 :工具、流程
✅ CPU 优化 :并行处理、异步
✅ 内存优化 :对象复用、JVM 参数
✅ IO 优化:缓存、批量、异步
下篇预告 :数据库性能优化实战
作者 :刘~浪地球
系列 :性能优化(二)
更新时间:2026-04-25