我正在尝试使用配备 24GB 内存和 10Gbit 连接的 Dell R710 设置 Wowza 媒体服务器,所有计算都表明它应该能够处理大约 20k 个连接,但是当我达到大约 9000 个连接时,Wowza 开始丢弃数据包,因为它认为这些数据包太晚了,无法传送。我还注意到传入连接的数量有所减少。
在 9000 个连接时,带宽输出约为 3 - 4gbps。该流是实时流,因此没有磁盘 io。
传入连接以每 3/4 秒 1 个新连接的速率从同一机架中的其他 4 台服务器生成,因此几乎没有延迟,并且只有一个交换机将它们全部连接起来。
当数据包开始丢失时,我注意到一个计数器开始上升,packets rejects in established connections because of timestamp
这个计数器是什么意思以及我该如何修复它。
我们检查了所有的 tcp 设置,但似乎找不到正确的组合来获得超过 9000 个连接而不丢失数据包。我们还检查了交换机和路由器上的所有设置,但找不到罪魁祸首。
操作系统目前是 OpenSuse 11.4,我们之前也尝试过 Centos 5.6,结果相同。
我们也尝试了多个 Wowza 实例来在不同的 JVM 之间分散负载,但结果仍然是相同的。
答案1
尝试按如下方式设置这些内核参数:
- net.ipv4.tcp_tw_recycle = 0
- net.ipv4.tcp_tw_reuse = 0
- net.ipv4.tcp_timestamps = 0
tcp_timestamps 和 tcp_tw_recycle 可能导致“由于时间戳而拒绝已建立的连接”。