【发布时间】:2017-05-26 13:04:15
【问题描述】:
在我们基于 C/S 的网络游戏项目中,我们使用 TCP 进行网络传输。我们包括Libevent,为每个连接使用一个bufferevent来自动处理网络I/O。
以前效果不错,最近卡顿问题浮出水面。当我做一些压力测试以使网络更繁忙时,延迟变得非常高,几秒钟或更长时间。服务器陷入混乱状态:
- 平均 CPU 使用率下降(0%-60%-0%-60% 重复,等待什么?)
- 净流量减少 (nethogs)
- 连接到服务器的客户端仍然存在(netstat 和 tcpdump)
看起来有些东西神奇地减慢了所有系统的速度,但与服务器的新连接及时响应退出。
当我将协议更改为 UDP 时,它在相同的情况下运行良好:没有明显的延迟,系统运行速度很快。净流量在 3M/S 左右。
项目正在 Intranet 上运行。我还测试了最大下载速度,接近 18M/S。
我研究了 Libevent 的部分头文件和文档,试图为所有连接设置速率限制。它做了一些改进,但即使我尝试了几种不同的配置,也没有完全解决问题。这是我的参数:read_rate 163840、read_burst 163840、write_rate 163840、write_burst 163840、tick_len 500ms。
感谢您的帮助!
【问题讨论】:
标签: networking tcp server latency libevent