接口压测指南
- 一、 为什么需要进行接口压测
- 二 、接口压测的目标是什么
- 三、 用什么工具进行接口压测
- 四、 接口压测核心指标
- 4.1 JMeter的报告模板
- 4.2 ApiPost报告模板
- 五、 接口慢如何排查
- 5.1 大体排查思路
- 5.2 排查工具
- 5.3 压测经验
一、 为什么需要进行接口压测
- 突然有一天领导反馈他在使用产品功能时,感觉到页面有卡顿、停留时间过长
- 客服反馈用户投诉页面加载速度慢
- 运营推广/活动大促
- 为了能够彻底的了解为啥慢,活动能够承接多少用户/流量,此时此刻就需要进行对相应的产品功能对应的接口进行摸底,性能压力测试
二 、接口压测的目标是什么
在做接口压测之前,需要定义清楚本次压测希望达到什么效果,符合什么样的预期,只有清晰的量化指标,才可以有效指导接口压测。
例如:在100个并发的情况下,该接口响应时间P95百分位在200ms
三、 用什么工具进行接口压测
压测工具一般有开源和自研,本文档主要罗列有哪些开源的接口压测工具
工具 | 网址 |
---|---|
ab | https://httpd.apache.org/docs/2.4/programs/ab.html |
jmeter | https://jmeter.apache.org/ |
LoadRunner | https://www.microfocus.com/zh-cn/products/loadrunner-professional/overview |
ApiPost | https://www.apipost.cn/ |
四、 接口压测核心指标
- 响应时间: 平均、中位数、P75、P90、P95、P99、最小值、最大值
- 吞吐量: 每秒能够处理多少个请求
- 接收报文:每秒接收多少KB的数据
- 发送报文:每秒发送多少KB的数据
其中响应时间、吞吐量为最核心的两个指标
4.1 JMeter的报告模板
4.2 ApiPost报告模板
五、 接口慢如何排查
5.1 大体排查思路
- 确定接口的内部逻辑是怎样的,做了哪些事情
- 是不是资源层面的瓶颈、硬件、参数配置的问题?
- 针对查询类接口,是不是增加了必要的缓存?若有缓存还慢,进一步分析是不是缓存key多大?
- 是不是有依赖于三方接口?若有依赖,是否配置连接超时时间,读取数据超时时间?
- 是不是sql语句慢?(是否建立索引、是否连表查询)
- 是否是网络层面的问题?(带宽不足、DNS解析慢、丢包等等)
5.2 排查工具
- Arthas可以帮忙诊断某个接口具体某个方法耗时多少
- Prometheus或者听云APM、Skywalking收集JVM数据,内存、线程
- Top命令查看服务器负载
- jstack/jconsole/jstat/jhat分析JVM进程
5.3 压测经验
- 一般情况下,我们通过优化SQL语句、合理使用缓存、串行改并行几个手段就能取得不错的效果;
- 资源层面出问题了一般就需要进行架构调整,单纯改代码很难有质的变化;
- 网络带宽出问题一般是一种幸福的烦恼,因为这意味着你负责的系统用户流量上来了;
- 懂得压测比较容易,难得是如何分析压测的结果,如何采集压测期间的各种指标数据(JVM的指标、接口指标,Redis服务指标、数据库指标,Docker指标、物理机指标),如何把收集到的指标放在一起分析,解读