Web 应用程序需要从Windows Server 2012 R2
机器上进行测试。性能测试在 300-400 个线程上执行JMeter 5.3
。在测试执行期间,JMeter 中出现以下错误,测试运行 20 秒后每秒出现 1-2 个错误:
响应代码:非 HTTP 响应代码:java.net.SocketException 响应消息:非 HTTP 响应消息:连接重置
我搜索了有关此错误的信息,发现它可能是由于设置了可以同时打开的最大 TCP 连接数而导致的。输出Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters'
:
UseDomainNameDevolution : 1 EnableICMPRedirect : 1 DeadGWDetectDefault : 1 DontAddDefaultGatewayDefault : 0 KeepAliveTime : 900000 KeepAliveInterval : 10000 NV Domain : m53.local ShutDownTimeAtLastDomainJoin : {11, 189, 171, 150...} (default) : TcpTimedWaitDelay : 60 MaxUserPort : 65534 TcpNumConnections : 16777214 TcpMaxDataRetransmissions : 10
TCP 池的大小似乎足够了,系统有 16 GB RAM 内存。我该如何优化系统以进行性能测试?
答案1
此“连接重置”可能是由测试系统引起的,因此我将从检查其日志开始。
如果你确信这是 JMeter 的问题,你可以考虑以下建议JMeterSocket关闭维基页面
您可能希望减少 TcpTimedWaitDelay,
30
以便临时端口可以更快地回收你可能想要添加
javax.net.debug=all
线到系统属性文件来查看底层发生了什么你可能想要增加 JMeter 日志记录详细程度对于 HTTP 协议,请将以下几行添加到log4j2.xml文件:
<Logger name="org.apache.http" level="debug" /> <Logger name="org.apache.http.wire" level="debug" />
最后,有些人表示,改变HTTP 请求到 Java 的实现有帮助,作为最后的手段,你可以使用 HTTP 请求默认值来切换它: