WireMock 并发发送多请求时出现超时问题该如何解决?
WireMock压测场景下跨请求超时问题优化方案
1. 禁用非必要的响应转换逻辑
- 若压测场景无需动态响应生成,全局关闭响应模板功能:WireMock启动时添加参数
--disable-response-templating - 单Stub维度关闭多余转换器:定义Stub时指定
"transformers": []空置转换器列表,跳过默认转换逻辑 - 优先使用精确路径/参数匹配规则,减少正则匹配、模糊匹配的计算开销
2. 配置测试场景专用缓存
- 开启Stub缓存:WireMock启动时添加配置
stubCachingEnabled: true,缓存匹配成功的Stub规则,避免每次请求全量遍历所有Stub - 静态响应预加载:所有压测用、测试用的静态响应直接写入Stub定义,不要使用外部文件读取、动态生成逻辑,消除IO开销
- 高频测试请求可单独配置内存缓存规则,相同请求直接返回预存响应,无需走完整匹配流程
3. 调整服务端线程与连接池配置
- 调大Jetty服务线程参数,适配服务器性能:启动时添加参数
--jetty-threads-max=200(可根据服务器CPU核心数调整为核心数的2-4倍)、--jetty-accept-queue-size=1024,避免请求排队溢出 - 调长HTTP连接keepalive时间,减少TCP握手开销:添加启动参数
--jetty-http-idle-timeout=30000 - 条件允许的情况下可以配置双端口隔离:分别开放压测流量端口、测试请求端口,两类请求的处理线程池完全隔离,压测流量排队不会阻塞测试请求
4. 关闭非必要的附加功能
- 压测阶段关闭请求日志与请求记录功能:启动时添加参数
--no-request-journal --verbose=false,消除日志写入、请求数据存储的性能开销 - 禁用未使用的扩展插件、录制/回放功能,仅保留核心Stub匹配能力
5. JVM性能优化(针对Java版WireMock)
- 分配足够的堆内存,避免堆内存不足触发频繁GC:启动时添加JVM参数
-Xms4G -Xmx4G(根据服务器内存调整) - 使用低停顿垃圾回收器,降低STW时长:添加参数
-XX:+UseG1GC -XX:MaxGCPauseMillis=100
内容的提问来源于stack exchange,提问作者SandijsT
相关产品推荐
相关产品推荐

