使用JMH对远程接口进行压测
在 《java中的基准测试框架JMH》中我们使用JMH框架进行Java SDK中的API的压测。
最近我又遇到了需要对第三方接口进行压测的需求,又用到了它。
JHM(Java Microbenchmark Harness)是OpenJDK团队开发的Java微基准测试框架,专门用于精确测量Java代码的性能,精度可以达到纳秒级别。
提供吞吐量、平均时间、采样时间等多种测试模式
自动进行预热处理,使JVM达到稳定状态
支持多线程测试,模拟真实并发场景
虽然它本身是针对JDK的,但是配合http框架也可以对远程API进行压测。
项目我放到网上了: https://github.com/davelet/local-load-test
用法是:
java -Dapi.baseUrl=http://localhost:8080 \
-Dapi.endpoint=/api/v1/test \
-Dapi.method=GET \
-jar target/benchmarks.jar \
-t 10 -wi 3 -w 5s -i 5 -r 10s \
ApiLoadTestBenchmark
API配置参数(通过-D指定)
| 参数 | 说明 | 默认值 |
|---|---|---|
| api.baseUrl | API基础URL | http://localhost:8080 |
| api.endpoint | API端点路径 | /api/v1/test |
| api.method | HTTP方法 | GET |
| api.body | 请求体(JSON) | "" |
| api.headers | HTTP Headers | "" |
| api.connectionTimeout | 连接超时(ms) | 5000 |
| api.socketTimeout | 响应超时(ms) | 10000 |
JMH性能测试参数(通过命令行选项指定)
| 参数 | 说明 | 默认值 | 示例 |
|---|---|---|---|
| -t | 并发线程数 | 1 | -t 10 |
| -wi | 预热迭代次数 | 0 | -wi 3 |
| -w | 每次预热时长 | 10s | -w 5s |
| -i | 测试迭代次数 | 1 | -i 5 |
| -r | 每次测试时长 | 10s | -r 10s |
| -f | JVM fork次数 | 1 | -f 1 |
更复杂和详细的说明可以参考 https://github.com/davelet/local-load-test/blob/develop/README.md
浙公网安备 33010602011771号