Connection reset异常的一种解决办法

最近压测时,服务端系统出现了“Connection reset”的异常,原因是服务器关闭了Connection[调用了Socket.close()方法]。当检查了应用中没有显示关闭的链接的代码后,调系统内核的参数后压测再无报错:

a.进入: vim /etc/sysctl.conf
b.添加:net.core.somaxconn=2048 该参数默认为128,根据实际场景调大
c. 执行 sysctl -p 命令
d.(可选) 查看 sysctl -a |grep somaxconn

### JMeter 压测时遇到 `Connection Reset` 的解决方案 当在使用 JMeter 进行压力测试时,如果遇到了 `java.net.SocketException: Connection reset` 错误,这通常意味着服务器端关闭了连接或者是网络配置不当造成的。以下是几种可能的解决办法: #### 调整 HTTP 客户端重试次数 尝试调整 JMeter 中 HTTP 请求默认设置中的客户端重试机制可以缓解部分由于瞬态网络波动引起的问题。具体操作是在 JMeter 安装目录下找到并编辑 `jmeter.properties` 文件,将 `httpclient4.retrycount=0` 更改为 `httpclient4.retrycount=1`[^2]。 然而,在某些情况下即使进行了这样的更改也可能无法解决问题,因为该参数仅影响请求失败后的自动重试行为,并不涉及底层 TCP/IP 协议栈的行为控制。 #### 修改 JVM 参数优化内存分配 适当增加 Java 应用程序启动时的最大堆大小和其他垃圾回收器选项有助于提高性能稳定性。可以通过命令行环境变量来设定这些值: ```bash set HEAP=-Xms256m -Xmx1024m set NEW=-XX:NewSize=128m -XX:MaxNewSize=512m ``` 这样做能够减少因频繁GC而导致的服务中断风险,从而间接降低发生 socket exception 的概率[^3]。 #### 配置操作系统内核参数增强并发处理能力 对于 Windows 平台而言,还可以通过对注册表项进行修改以提升系统的最大可用端口数量以及缩短 TIME_WAIT 状态持续时间等方式改善整体表现。创建一个新的 `.reg` 文件并将下面的内容粘贴进去再运行即可生效(记得先备份现有数据以防万一): Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\] "MaxUserPort"=dword:fffe "TcpTimedWaitDelay"=dword:1e [TCP连接数限制] "TcpNumConnections"=dword:fffffe [TCB缓存区数目上限]"MaxFreeTcbs"=dword:7D0 [哈希表尺寸]"MaxHashTableSize"=dword:10000 请注意以上数值均为十六进制表示法[^4][^5]。 通过实施上述措施之一或组合应用它们往往能有效减轻乃至彻底消除此类异常现象的发生频率。当然,最根本的办法还是要确保被测目标服务本身具备足够的资源应对预期负载水平。
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值