系统性能瓶颈分析与优化
系列导读:本篇将深入讲解系统性能瓶颈的分析方法与优化策略。
文章目录
- 目录
- 一、性能指标
- 1.1 核心指标
- 1.2 性能公式
- 二、瓶颈分析方法
- 2.1 分析工具
- 2.2 分析流程
- 三、CPU 瓶颈优化
- 3.1 CPU 飙高分析
- 3.2 优化策略
- 3.3 代码示例
- 四、内存瓶颈优化
- 4.1 内存分析
- 4.2 优化策略
- 五、IO 瓶颈优化
- 5.1 IO 分析
- 5.2 优化策略
- 5.3 代码示例
- 总结
目录
- 一、性能指标
- 二、瓶颈分析方法
- 三、CPU 瓶颈优化
- 四、内存瓶颈优化
- 五、IO 瓶颈优化
- 总结
一、性能指标
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 飙高分析
# 查看 CPU 使用top-H-p<pid># 查看线程栈jstack<pid>>thread.log# 生成火焰图perf record-g-p<pid>perf script|stackcollapse-perf.pl|flamegraph.pl>cpu.svg3.2 优化策略
CPU 优化方向: 1. 算法优化:降低时间复杂度 2. 减少锁竞争:使用并发工具 3. 异步处理:非阻塞 IO 4. 缓存:减少计算 5. 并行处理:多线程/多进程3.3 代码示例
// 优化前:同步阻塞publicResultprocess(Requestrequest){Resultresult=newResult();result.setData1(service1.call(request));result.setData2(service2.call(request));result.setData3(service3.call(request));returnresult;}// 优化后:并行处理publicResultprocess(Requestrequest){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();Resultresult=newResult();result.setData1(f1.join());result.setData2(f2.join());result.setData3(f3.join());returnresult;}四、内存瓶颈优化
4.1 内存分析
# 查看内存使用free-m# 查看进程内存pmap-x<pid># JVM 内存分析jmap-heap<pid>jmap-histo<pid>|head-204.2 优化策略
内存优化方向: 1. 对象复用:对象池 2. 减少对象创建:StringBuilder 3. 及时释放:置 null 4. 合理设置 JVM 参数 5. 使用堆外内存五、IO 瓶颈优化
5.1 IO 分析
# 查看 IO 状态iostat-x1# 查看磁盘使用df-h# 查看文件打开数lsof-p<pid>|wc-l5.2 优化策略
IO 优化方向: 1. 缓存:Redis、本地缓存 2. 批量操作:减少 IO 次数 3. 异步写入:消息队列 4. 压缩:减少传输量 5. SSD:提升硬件性能5.3 代码示例
// 优化前:单条插入for(Orderorder:orders){orderMapper.insert(order);}// 优化后:批量插入orderMapper.batchInsert(orders);总结
✅性能指标:QPS、RT、CPU、内存、IO
✅分析方法:工具、流程
✅CPU 优化:并行处理、异步
✅内存优化:对象复用、JVM 参数
✅IO 优化:缓存、批量、异步
下篇预告:数据库性能优化实战
作者:刘~浪地球
系列:性能优化(二)
更新时间:2026-04-25
