服务器端出现大量SYN_RECV状态,导致客户端无法连接
2012-06-11 14:25
393 查看
程序背景:
客户端与服务端通过短连接通信,客户端发送消息频率为 600条/秒
BUG现象:
客户端向服务端发送一段时间的消息后,客户端无法与服务段建立连接,
查看服务端端口状态
netstat -an|grep 37058
发现存在大量SYN_RECV以及CLOSE_WAIT
查看客户端端口状态
netstat -an|grep 37058
发现存在大量的SYN_SENT以及FIN_WAIT_1
由于在服务端日志中曾经出现个 104 这个错误码,OS error code 104: Connection reset by peer
而产生这个错误码后,会触发SIGPIPE信号。
因此猜想,出现SYN_RECV 和CLOSE_WAIT状态,是由于ACCEPT以及CLOSE函数调用时,被SIGPIPE中断,导致当时函数正在处理的端口出现异常状态。
BUG解决:
通过signal(SIGPIPE,SIG_ING) 忽略SIGPIPE信号,防止端口出现SYN_RECV以及CLOSE_WAIT状态。
客户端与服务端通过短连接通信,客户端发送消息频率为 600条/秒
BUG现象:
客户端向服务端发送一段时间的消息后,客户端无法与服务段建立连接,
查看服务端端口状态
netstat -an|grep 37058
发现存在大量SYN_RECV以及CLOSE_WAIT
查看客户端端口状态
netstat -an|grep 37058
发现存在大量的SYN_SENT以及FIN_WAIT_1
由于在服务端日志中曾经出现个 104 这个错误码,OS error code 104: Connection reset by peer
而产生这个错误码后,会触发SIGPIPE信号。
因此猜想,出现SYN_RECV 和CLOSE_WAIT状态,是由于ACCEPT以及CLOSE函数调用时,被SIGPIPE中断,导致当时函数正在处理的端口出现异常状态。
BUG解决:
通过signal(SIGPIPE,SIG_ING) 忽略SIGPIPE信号,防止端口出现SYN_RECV以及CLOSE_WAIT状态。
相关文章推荐
- 对服务器上出现大量的SYN_RECV状态的TCP连接的问题分析
- 大量SYN_RECV连接,而导致业务出现短暂不可用的解决方法分享
- 对服务器上出现大量的SYN_RECV状态的TCP连接的问题分析
- 对服务器上出现大量的SYN_RECV状态的TCP连接的问题分析
- [总结]数据库连接池设置不当导致大量的本地连接出现time_wait状态。
- 对服务器上出现大量的SYN_RCVD状态的TCP连接的问题分析
- 关于php socket客户端连接java socket服务器端,出现连接中断的问题。
- 远程桌面连接时出现”由于无法升级或重续本地计算机的客户端访问许可证,远程会话被中断“
- myeclipse cvs客户端无法连接服务器端,提示“unknown response received from cvs server”解决办法
- linux服务器出现大量CLOSE_WAIT状态的连接
- Red Hat Enterprise Linux 7 (RHEL7)防火墙导致oracle客户端无法连接服务器
- svn客户端无法在连接服务器端的svn
- 【Linux网络编程笔记】TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法—基础知识篇
- 当出现大量timewait状态的连接时,该如何处理?
- 远程连接出现“由于无法升级或重续本地计算机的客户端访问许可证,远程会话被中断。请跟服务器管理员联系。”问题的解决方法
- VMware-console客户端 出现”目标主机积极拒绝,无法连接” 怎么 如何 解决 方法 ?
- TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法—基础知识篇
- Linux网络tcp连接大量CLOSE_WAIT和TIME_WAIT状态的出现和解决方法
- Oracle 客户端配置后,同时再装服务器端出现的无法同时链接远程服务器和本地的问题
- 【Linux网络编程笔记】TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法—实践篇