You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter+Docker性能测试卡停于TrustAll Socket Factory阶段求助

JMeter+Docker性能测试卡停在SSL初始化阶段的排查方案

问题概述

在JMeter+Docker架构下执行性能测试时出现以下异常卡停:

  • 首次启动测试时,进程卡在日志输出INFO o.a.j.p.h.s.h.LazyLayeredConnectionSocketFactory: Setting up HTTP TrustAll Socket Factory阶段,停在首个线程组启动前
  • 终止进程重启后,首个线程组可正常执行,但第二个线程组执行时再次卡停
  • 已通过命令行参数指定SSL证书:
    -Djavax.net.ssl.keyStore=path of certificates
    -Djavax.net.ssl.keyStorePassword=password
    

排查步骤

1. 确认容器内证书路径有效性

Docker容器拥有独立文件系统,需确保指定的证书路径是容器内的绝对路径,而非宿主机路径:

  • 进入容器执行ls <你的证书路径>,确认文件存在且具备可读权限
  • 若证书从宿主机挂载到容器,检查docker run或docker-compose的挂载配置是否正确,避免路径映射错误

2. 验证证书文件完整性与格式

在容器内执行以下命令,确认证书可正常加载:

keytool -list -keystore <你的证书路径> -storepass <密码>
  • 若命令报错,说明证书文件损坏、密码错误或格式不兼容(JMeter默认支持JKS格式,其他格式需提前转换)

3. 排查SSL配置冲突

日志显示JMeter在初始化TrustAll Socket Factory,这可能与自定义密钥库配置冲突:

  • 检查JMeter测试计划中,HTTP请求的SSL设置是否勾选了**"Trust all certificates"**,若勾选需取消,强制JMeter使用指定的密钥库
  • 避免同时启用自定义信任证书和TrustAll模式,二者仅需保留其一

4. 检查容器网络连通性

卡停可能源于网络层面阻塞:

  • 在容器内用curl测试目标HTTPS地址,确认可正常建立连接:
    curl -v https://<你的目标地址> --cacert <证书路径>
    
  • 检查容器网络模式(桥接/host等)是否限制SSL握手,必要时切换网络模式测试

5. 调整SSL超时参数

SSL初始化的超时等待可能导致卡停,可通过以下参数缩短超时时间:

  • 在JMeter启动命令中添加:
    -Dsun.net.client.defaultConnectTimeout=30000 -Dsun.net.client.defaultReadTimeout=30000
    
  • 或在容器内的JMeter配置文件user.properties中添加:
    https.socket.timeout=30000
    https.connection.timeout=30000
    

6. 检查线程组资源释放

第二个线程组卡停可能是第一个线程组未正确释放连接资源:

  • 在第一个线程组末尾添加**"TCP Sampler Close"**元件,强制释放HTTP连接
  • 确认HTTP请求的Implementation选择HttpClient4,并开启连接池自动回收设置

7. 启用详细日志定位问题

启动JMeter时添加DEBUG日志参数,获取SSL初始化的详细过程:

jmeter -n -t <测试计划路径> -Lorg.apache.jmeter.protocol.http.sampler=DEBUG -Djavax.net.ssl.keyStore=... -Djavax.net.ssl.keyStorePassword=...

通过日志确认卡停的具体环节(证书加载、握手等),进一步缩小排查范围

内容的提问来源于stack exchange,提问作者Shweta Parmar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:00:49