首页 / 知识库 / python服务端进阶 / 服务端高并发优化

10 - 压测与监控

前面反复强调「先测量、再优化」。这一章讲清楚:怎么测(压测)、看什么(监控指标)。没有数据,优化就是盲人摸象。

一句话先记住:压测告诉你「上限在哪、瓶颈在哪」,监控告诉你「线上此刻健不健康」。


10.1 压测:主动找出系统的极限

压测(压力测试)就是用工具模拟大量请求打你的接口,观察它在什么流量下开始变慢、在什么流量下崩溃。

压测能回答的问题

· 我这个接口最多能扛多少 QPS?
· 到多少并发时响应时间开始飙升?
· 瓶颈是 CPU、内存,还是数据库?
· 加了缓存/改了异步后,到底有没有变好?(对比验证)

常用压测工具

工具特点适合
wrk轻量、高性能、命令行快速压单个接口
LocustPython 写脚本、有 Web 界面模拟复杂用户行为,和 Python 栈契合
ab (ApacheBench)最简单,老牌最快速的冒烟测试
k6 / JMeter功能全面复杂场景、团队协作

压测的正确姿势

1. 从小流量开始,逐步加压(阶梯式)
2. 观察:QPS 到多少后,响应时间开始明显上升?
3. 找到「拐点」——那就是当前系统的容量上限
4. 定位拐点时的瓶颈(看监控:CPU?DB?连接池?)
5. 优化 → 再压一遍 → 对比是否提升

注意:压测环境要尽量接近生产(数据量、配置),否则数据没参考价值。别拿空数据库压出来的 QPS 当真。


10.2 监控:盯住线上健康状况

压测是「上线前主动测」,监控是「上线后持续盯」。要监控的指标分几层:

应用层指标(黄金四指标 / RED)

· QPS / 吞吐量       —— 每秒处理多少请求
· 响应时间(RT)      —— 尤其看 P95 / P99(见下文)
· 错误率            —— 5xx、超时占比
· 并发数 / 排队情况   —— 有没有请求在排队

资源层指标(USE)

· CPU 使用率
· 内存使用率
· 磁盘 IO / 网络 IO
· 连接数(数据库连接池占用、TCP 连接数)

数据库层指标

· 慢查询数量
· 活跃连接数 / 连接池是否打满
· 主从复制延迟(读写分离时)
· 缓存命中率(Redis)

10.3 一个关键概念:P95 / P99

不要只看「平均响应时间」,它会骗你。 要看分位数(Percentile)

P95 = 95% 的请求都比这个值快(只有 5% 比它慢)
P99 = 99% 的请求都比这个值快(只有 1% 比它慢)

举例:1000 个请求
  平均 RT = 50ms   ← 看起来很好
  但 P99 = 2000ms  ← 有 10 个请求慢到 2 秒!

平均值被大量快请求「拉低」,掩盖了少数极慢的请求。
而那些慢请求,往往就是用户投诉的来源。

经验:优化和 SLA(服务等级目标)通常盯 P95 / P99,而不是平均值。因为「大部分人的体验」比「平均体验」更真实。


10.4 常见监控工具组合

用途常见工具
指标采集 + 可视化Prometheus + Grafana
日志收集分析ELK(Elasticsearch + Logstash + Kibana)/ Loki
链路追踪Jaeger / SkyWalking(看一个请求在各服务耗时)
错误告警Sentry / 告警规则(钉钉、企业微信通知)

这些是「运维/可观测性」的范畴,了解它们能回答什么问题即可,具体搭建可以后面单独学。


10.5 优化闭环

把压测和监控串起来,就是完整的优化闭环:

   ┌─────────────────────────────────────┐
   │                                       │
   ▼                                       │
[压测] → [看监控找瓶颈] → [针对性优化] → [再压测验证]
   │                                       │
   └───────────────────────────────────────┘
        瓶颈会转移,循环直到满足目标

本章小结

你要记住要点
压测主动找系统上限和瓶颈,工具:wrk / Locust
压测姿势逐步加压找拐点,环境要接近生产
监控分层应用层(QPS/RT/错误率)+ 资源层(CPU/内存/连接)+ DB 层
P95/P99别只看平均值,分位数才反映真实体验
优化闭环压测 → 找瓶颈 → 优化 → 再压测

下一章预告:最后一章,把整个系列的所有手段汇成一张「高并发优化决策树」,让你遇到问题时按图索骥。


上一章 ← 09 - 一个高并发接口的优化实录 | 下一章 → 11 - 总结:高并发优化决策树