Allenxuxu / gev

🚀Gev is a lightweight, fast non-blocking TCP network library / websocket server based on Reactor mode. Support custom protocols to quickly and easily build high-performance servers.
MIT License
1.73k stars 194 forks source link

tcp发送缓冲区堆积的时候似乎会导致服务cpu满载 #101

Closed ichixia closed 3 years ago

ichixia commented 3 years ago

我在压测的时候,如果客户端不再接收tcp数据,会导致服务端发送缓冲区堆积,这个时候使用gev的服务就会把服务器的cpu打满。请问有遇到过这个问题嘛?

Allenxuxu commented 3 years ago

是指服务端一直在发送,客户端不read数据吗?

ichixia commented 3 years ago

是指服务端一直在发送,客户端不read数据吗?

是的。pprof显示cpu占用最高的事件就是unix.EpollWait里面的Syscall6。 这个有什么设置能避免吗

Allenxuxu commented 3 years ago

理论上不能这样的,因为gev的发送缓冲区ringbuffer会无限扩容的。

ichixia commented 3 years ago

理论上不能这样的,因为gev的发送缓冲区ringbuffer会无限扩容的。

那就是只能由业务层控制了?ringbuffer到了一定长度,业务层就控制发送速度或者不发

Allenxuxu commented 3 years ago

https://github.com/Allenxuxu/gev/issues/52 看下这个 issue

ichixia commented 3 years ago

52 看下这个 issue

感谢