最近在开发一款多线程音乐下载播放器的服务端.
包括tcp应用服务器和服务容器的代码.
刚开始进行压力测试的时候频繁出现Connection reset by peer异常,
并且成功的连接数不超过50个.
google一下发现
出现Connection reset by peer比较常见的原因是:
服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉;
.连接被防火樯或proxy中断,或防火墙和代理设置不当。
对于第一种原因,
回想起tcp/ip详解第一卷协议中提到过:
bsd的socket的tcp连接队列的默认长度是5,
backlog 用于在TCP层接收链接的缓冲池的最大个数,这个个数可在应用层中的listen函数里设置,当客户链接请求大于这个个数(缓冲池满),其它的未进入链接缓冲池的客户端在tcp层上tcp模块会自动重新链接,直到超时(大约57秒后)
我们的应用层的链接完成是要从tcp层的链接缓冲池中移出一个(accept函数实现)
因此我在本机测试的时候,连接数超过50就报Connection reset by peer.
是因为连接数限制,操作系统(当前系统为win2k.)把超出的连接丢弃的原因.
我兴冲冲地把serversocket的backlog设置为200,可以支持
200个线程每休息2s发送一次请求,请求的等待时间为5s.
也就是大约每7s进行一次请求应答.
计算下来,1s能进行30次请求应答.
另外记录一下SO_LINGER
3.2
How do I control the amount of time a socket will
linger before resetting?
When a socket wishes to terminate a connection it can "linger",
allowing unsent data to be transmitted, or it can "reset" which means
that all unsent data will be lost. You can explicitly set a delay before a reset
is sent, giving more time for data to be read, or you can specify a delay of
zero, meaning a reset will be sent as the java.net.Socket.close() method is
invoked.
The socket option SO_LINGER controls whether a connection will be aborted,
and if so, the linger delay. Use the java.net.Socket.setSoLinger method, which
accepts as parameters a boolean and an int. The boolean flag will
activate/deactivate the SO_LINGER option, and the int will control the delay
time.
摘自 http://www.davidreilly.com/java/java_network_programming/
分享到:
相关推荐
linux iptables防火墙黑名单(封IP) Connection reset by peer
"Connection Reset by Peer" 是一个常见的网络错误,通常在数据传输过程中出现,表明通信的另一方(客户端或服务器)突然终止了连接。这个问题可能由多种原因引起,下面我们将详细探讨这些原因并提供相应的解决方案...
* Connection reset by peer:Connection reset by peer 是一种特殊的 SocketException,它发生在客户端和服务器端之间的连接断开后,导致连接的一端继续发送数据,引发该异常。 实践经验 通过实践经验,我们可以...
解决oracle数据库发生'Connection reset by peer' or 'Connection reset'的错误 这边的数据库连接是kettle自带的h2数据库,只要有kettle就有这个数据库,目录位于data-integration\samples\db\,连接方式是 ...
read tcp 192.168.31.60:55550->104.18.123.25:443: read: connection reset by peer 传输异常 然后看见网上说可以配置阿里云提供的镜像加速 具体方式 进入阿里云的容器镜像服务 快速链接: 容器镜像服务 复制加速...
ECONNRESET错误表示"connection reset by peer",即对方(通常是服务器)主动关闭了连接。这可能是因为服务进程在客户端之前结束,导致服务器发送一个FIN包来结束连接。如果客户端此时尝试再次发送数据,服务器会...
此资源为深信服外置短信中心接口,可使用官方的工具smsservice工具,但短信猫放在其它位置通过网络使用外部接口时,频繁出现连接不稳定,[SMS_SP]readn failed: Connection reset by peer,此时主要原因在连接配置上...
根据给定的文件信息,我们可以总结出以下关于SQL数据库连接(Connection)的相关知识点: ### SQL数据库连接(Connection)概述 在Java中,`Connection`对象是JDBC API的核心组件之一,用于与数据库建立连接。它是...
主要语言:Rust 项目分类:[工具] [应用软件] 项目标签:[桌面应用] 推荐理由:一款免费远程桌面软件,支持多平台,包括Linux、Mac、Windows和Android。它以开箱即用的方式提供远程桌面功能,无需任何复杂的配置。...
例如,如果服务器端关闭了连接,而客户端还在尝试发送数据,那么客户端会收到"Connection reset by peer"的错误信息。 2. **未关闭的连接导致异常**:另一种情况是一端程序退出,但未正确关闭Socket连接。当另一端...
XXL-JOB是一个分布式任务调度平台,其设计思想是将调度行为抽象成一个独立的“调度中心”,这个中心不承担具体的业务逻辑,而是负责发起调度请求。任务则被抽象为分散的`JobHandler`,由“执行器”来统一管理和执行...
**Modbus TCP客户端和服务器示例** 在工业自动化和物联网(IoT)领域,Modbus是一种广泛使用的通信协议,它允许设备之间进行简单的数据交换。本文将深入探讨Modbus TCP,这是一种在网络环境中运行的Modbus变体,尤其...
Fixes flakiness of adb shell port forwarding that leads to "Connection reset by peer" error message. Fixes authentication via ADB_VENDOR_KEYS when reconnecting devices. Fixes authentication—when the ...
Fixes flakiness of adb shell port forwarding that leads to "Connection reset by peer" error message. Fixes authentication via ADB_VENDOR_KEYS when reconnecting devices. Fixes authentication—when the ...
有关详细说明,请参考 。 在本地重现此问题的步骤: 设定环境 npm install 启动服务器 npm start 在单独的终端中运行测试客户端 npm run client ... 因为从上游的角度来看,连接已关闭,所以它为此请求发送了一个[RST...