JMeter 4.0 Java请求采样器执行报错求助
排查JMeter Java请求执行时的SSL握手错误
先给你拆解下这个错误的核心:你看到的这个WARN日志其实是JMeter的插件管理器在尝试连接官方服务器获取插件更新信息时触发的,本质是JVM不信任目标服务器的SSL证书,导致PKIX路径构建失败。不过这里要先区分两种情况来处理:
一、如果只是日志出现警告,Java请求实际能正常运行
这种情况下这个警告不影响你的业务采样,只是插件管理器的自动更新检查出了问题,可选择性解决:
- 方法1:导入JMeter插件服务器的证书到JVM信任库
- 用浏览器打开JMeter插件官网,导出网站的根证书(操作步骤:点击浏览器地址栏的锁图标 -> 查看证书 -> 导出为.crt格式文件)
- 用JDK自带的
keytool命令导入证书到JVM的信任库,命令如下(替换路径和证书名):
注意:默认信任库密码是keytool -import -alias jmeter-plugins -keystore $JAVA_HOME/jre/lib/security/cacerts -file /你保存证书的路径/jmeter-plugins.crtchangeit
- 方法2:临时禁用SSL证书检查(仅测试环境用,不推荐生产)
修改JMeter启动脚本(Windows是jmeter.bat,Linux是jmeter.sh),添加JVM参数:-Djavax.net.ssl.trustStoreType=JKS -Dcom.sun.net.ssl.checkRevocation=false
二、如果Java请求本身执行失败(确实和SSL相关)
如果你的Java请求采样器是在调用HTTPS接口,那这个证书问题就会直接影响业务执行,解决方式如下:
- 方法1:导入目标服务器证书到JVM信任库
和上面导入插件证书的步骤一样,把你请求的HTTPS服务器的根证书导入到JMeter使用的JVM的cacerts信任库中即可 - 方法2:在Java请求代码中忽略SSL验证(仅测试用)
可以在你的采样器代码里添加一段忽略证书验证的逻辑,示例代码如下:
在你的采样器private void disableSSLCertCheck() { try { // 创建信任所有证书的TrustManager TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) {} public void checkServerTrusted(X509Certificate[] certs, String authType) {} } }; // 初始化SSL上下文 SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); // 设置默认的SSLSocketFactory和HostnameVerifier HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true); } catch (Exception e) { e.printStackTrace(); } }runTest方法的开头调用这个方法即可。
额外需要排查的点
- 确认JMeter使用的JDK版本和你打包Java请求时用的JDK版本一致,避免版本不兼容问题
- 检查你的Jar包是否包含了所有依赖,如果采样器依赖其他第三方库,要把这些依赖Jar也放到JMeter的
lib或lib/ext目录下(注意不要和JMeter自带的Jar冲突) - 仔细查看
jmeter.log的完整日志,确认是否有其他和Java请求执行相关的异常,别只盯着这个插件管理器的警告
内容的提问来源于stack exchange,提问作者Venkat Akurathi
相关产品推荐
相关产品推荐

