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
相关产品推荐
相关产品推荐

