🧠 1. 基础环境信息
🖥️ 机器配置
CPU:8核
内存:24G
系统:Mac
Go版本:1.24.10
fd限制:65535
端口范围:10000~65535
📦 服务架构
Cache-Aside + SingleFlight 防击穿
redis存储结构:列表json
🚀 2. 压测目标
目标:1w 并发
模式:k6 VU 模式
📊 3. 初始压测结果(全链路)
http_req_duration:
avg = 1.92s
p95 = 4.07s
p99 = 4.78s
QPS:7556.118687/s
🧠 初步现象
- QPS 未达预期
- RT 偏高
❗初步结论
性能明显低于预期,需要进行瓶颈定位
🔍 4. 问题排查(断点分析法)
🥇 断点1:Go 直接 return(去业务逻辑)
代码
return &v1.GetCommentsReply{Comments: []*v1.Comment{}}, nil
结果
http_req_duration:
avg = 362.82ms
p95 = 948.57ms
p99 = 1.82s
QPS:35067.480146/s
🥈 断点2:去 Redis(返回默认JSON)
代码
json.Unmarshal → return
结果
http_req_duration:
avg = 1.31s
p95 = 4.31s
p99 = 5.12s
QPS:7881.484146/s
结论
没有网络io的情况下,结果很不理想
🚀 5. 优化方案
定位到问题后,尝试使用下面2个方案优化,保证公平性json.Unmarshal也重新压一遍
压测vu:1w (降vu为了数据更稳定,单机压测,vu太大,cpu爆炸会有干扰)
| 1w并发性能对比 | QPS |
|---|---|
| json.Unmarshal | 21840 |
| sonic.Unmarshal | 27550 |
| protobuf | 28814 |