Socket 多个同时并发注册 系统崩溃

参考网站:http://www.dewen.org/q/2934/Socket+%E5%A4%9A%E4%B8%AA%E5%90%8C%E6%97%B6%E5%B9%B6%E5%8F%91%E6%B3%A8%E5%86%8C+%E7%B3%BB%E7%BB%9F%E5%B4%A9%E6%BA%83


多线程 Socket 监听 多个终端同时并发登录 系统有时候崩溃

底层socket通信,由于tcp安全协议,一次成功后,socket状态会由ESTABLISHED变为TIME_WAIT状态,该状态下的socket是不可用的,线程数达到几万后,系统响应就会变的很差,所以在多线程操作的时候一定要主动关闭socket,还有就是要对系统进行优化,可以设置socket状态为time_wait时仍然可用,linux中是这样设的:
/etc/sysctl.conf文件
net.ipv4.tcp_tw_reuse = 1


其中还有其它参数如:
net.ipv4.tcp_fin_timeout
net.ipv4.tcp_keepalive_time
net.ipv4.ip_local_port_range
net.ipv4.tcp_max_syn_backlog
net.ipv4.tcp_max_tw_buckets


还有就是socket服务端响应请求体内容的大小,例如登陆操作用户名密码,服务端只回应true或者false,则速度要比回应一大堆用户信息快的多
适当优化,可达到很大的吞吐量

------------------------------------------------------------------


你这种情况,在《Unix网络编程 第1卷:套接口API》的第5.13小节有一定的介绍。


如果你的socket程序并没有处理 SIGPIPE 信号的话,由于该信号的缺省行为是终止进程,因此,当发生网络错误的时候,你的socket进程很可能被终止,导致程序崩溃。


一般情况只会是程序崩溃,整个Linux系统崩溃的可能性应该很小吧,不知道你指的系统崩溃是否表达的是整个系统崩溃?


--------------------------------------------------------------------

如果是在Windows Server上,需要注意几个相关参数的设置
MaxUserPort、MaxHashTableSize、MaxFreeTcbs。
这些决定了服务器能够提供的用于处理socket连接的硬件资源,具体信息可以百度一下。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值