使用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

posted @ 2025-10-31 14:25  大卫小东(Sheldon)  阅读(14)  评论(0)    收藏  举报