使用JMeter 2.13自动化REST API时大JSON响应触发SSL异常求助
解决JMeter 2.13测试大JSON响应时的SSL peer shut down incorrectly错误
我之前帮不少同行处理过这个问题,当用JMeter 2.13测试返回大JSON数据的REST API时出现这个SSL错误,本质上大多是JMeter默认的SSL配置或JVM参数没法适配大响应场景,给你几个一步步能落地的解决办法:
1. 调整JVM启动参数(最常用的解决办法)
找到JMeter安装目录下的jmeter.bat(Windows)或jmeter.sh(Linux),编辑文件,在JVM启动参数部分添加以下配置:
# Windows示例,在set HEAP=...之后添加 set JVM_ARGS="-Dsun.security.ssl.allowUnsafeRenegotiation=true -Djsse.enableSNIExtension=false -Dhttps.maxResponseSize=0 -Dhttp.socket.timeout=60000 -Dhttp.connection.timeout=60000"
# Linux示例,在HEAP=...之后添加 JVM_ARGS="-Dsun.security.ssl.allowUnsafeRenegotiation=true -Djsse.enableSNIExtension=false -Dhttps.maxResponseSize=0 -Dhttp.socket.timeout=60000 -Dhttp.connection.timeout=60000"
参数说明:
Dsun.security.ssl.allowUnsafeRenegotiation=true:解决SSL重协商时的兼容性问题,大响应场景下可能触发这个限制Djsse.enableSNIExtension=false:禁用SNI扩展,部分老服务器对SNI支持不好会导致连接中断Dhttps.maxResponseSize=0:取消HTTPS响应大小限制(默认有大小限制,0表示无限制)Dhttp.socket.timeout/Dhttp.connection.timeout:延长连接和读取超时时间,避免大响应还没传完就超时断开
2. 调整JMeter HTTP请求采样器配置
- 打开你的HTTP请求采样器(或HTTP请求默认值),切换到Advanced标签页
- 将
Response Timeout设置为更大的值,比如60000(单位:毫秒,即1分钟) - 如果响应特别大,建议勾选
Save Response to file选项,把响应直接写入文件而不是存在内存里,避免内存溢出间接引发SSL连接问题
3. 升级JMeter版本(从根源解决)
JMeter 2.13是2015年的老版本了,后续的3.x、4.x、5.x版本对SSL协议支持、大响应处理、内存管理都做了大量优化,很多老版本的SSL bug已经被修复。升级到最新的稳定版(比如目前的5.6.x)不仅能解决这个问题,还能提升测试的整体性能和稳定性。
4. 排查服务器端配置(备选)
如果上面的方法都没用,可以联系运维团队检查服务器的SSL配置:
- 比如Nginx的
ssl_buffer_size是否设置过小,导致大响应无法正常传输 - Tomcat等应用服务器的
maxPostSize、maxHttpHeaderSize等参数是否限制了响应大小 - 服务器的防火墙或负载均衡是否有超时时间设置,导致连接提前断开
你遇到的错误信息:
- javax.net.ssl.SSLException: SSL peer shut down incorrectly
at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:596)
at sun.security.ssl.InputRecord.read(InputRecord.java:532)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:983)
at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:940)
at sun.security.ssl.AppInputStream...
内容的提问来源于stack exchange,提问作者Selvaraj
相关产品推荐
相关产品推荐

