连接无响应 - epoll

Epoll有两种模式,LT模式 与 ET模式。 默认情况下是LT模式,由于ET模式在高并发,高流量的情况下,处理效率会高于ET模式,所以项目中采用了ET模式。

服务器一直运行良好,跑几千机器人也没有什么问题。但突然之间发现,机器人在反复掉线上线的测试后,会出现一种情况:服务器端会再也收不到客户端的连接事件,或者这个连接事件响应会非常慢,而已连接成功的fd读写数据是没有任何问题的。

ET模式事件触发条件:

对于读取操作:

对于写操作:

LT模式事件触发条件:

对于读操作:

对于写操作:

分析发现,将ET模式改为LT模式,该问题就解决了。

分析和Review了代码,觉得不应该有问题,但是为啥ET模式下,就收不到新的连接事件了呢,有点奇怪,从两种模式的差异看,好像应该和连接无关,如果是连接数到达了上限,应该是两种模式下都有一样的问题才对,但是LT模式确实没有问题。

由于上线时间比较着急,目前测试下来,LT模式下性能也能满足,暂时就改为LT模式。 以后还需要学习更多的网络问题排查方式来更进一步定位这个问题才行。

留下了一个遗憾,没有定位到最终问题,不知道大家有没有好的方式来定位这个问题?