当前位置: 技术问答>linux和unix
求解:EPOLL高并发下不再响应新事件
来源: 互联网 发布时间:2016-10-16
本文导语: 我用的就是网上比较典型的EPOLL模型,我把accept单独放在了另一个线程中。使用EPOLLET模式,监视了EPOLLIN和EPOLLLDUP事件。EPOLLLDUP用于监视客户端的CLOSE事件,来者皆close之,另外在EPOLLIN事件处理中,用了一个recv,判断...
我用的就是网上比较典型的EPOLL模型,我把accept单独放在了另一个线程中。使用EPOLLET模式,监视了EPOLLIN和EPOLLLDUP事件。EPOLLLDUP用于监视客户端的CLOSE事件,来者皆close之,另外在EPOLLIN事件处理中,用了一个recv,判断是否返回0.或-1,是就close掉。除此之外没有任何业务处理逻辑。
在客户端,我用500个线程去连接EPOLL,连接上以后什么都不做,sleep(3000)后断开,断开后再继续连接,反复这个过程。以作压力测试。
问题是现在启动客户端以后跑上个十几秒,在服务器端就再也无法响应包括客户端close在内的任何事件,而accept线程还在不断的接收,导致fd迅速攀升。
通过netstat可以看到大量的CLOSE_WAIT。
不知何故,是我的压力测试程序写的太天真了吗?我确定关了iptables。
在客户端,我用500个线程去连接EPOLL,连接上以后什么都不做,sleep(3000)后断开,断开后再继续连接,反复这个过程。以作压力测试。
问题是现在启动客户端以后跑上个十几秒,在服务器端就再也无法响应包括客户端close在内的任何事件,而accept线程还在不断的接收,导致fd迅速攀升。
通过netstat可以看到大量的CLOSE_WAIT。
不知何故,是我的压力测试程序写的太天真了吗?我确定关了iptables。
|
试试改close为shutdown如何
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。