![由于时间戳原因,已建立的连接中大量数据包被拒绝](https://linux22.com/image/549770/%E7%94%B1%E4%BA%8E%E6%97%B6%E9%97%B4%E6%88%B3%E5%8E%9F%E5%9B%A0%EF%BC%8C%E5%B7%B2%E5%BB%BA%E7%AB%8B%E7%9A%84%E8%BF%9E%E6%8E%A5%E4%B8%AD%E5%A4%A7%E9%87%8F%E6%95%B0%E6%8D%AE%E5%8C%85%E8%A2%AB%E6%8B%92%E7%BB%9D.png)
我正在尝试使用配备 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 可能导致“由于时间戳而拒绝已建立的连接”。