我工作所在的网络上有大约 40 台计算机和相当多的打印机。当有很多人工作时,网络会很慢。
我可以测试我的计算机和路由器之间的 ping,它会不断上升,有时会达到超时的程度。
我们使用的路由器在Atom处理器上运行Ubuntu,它有4GB的内存。
当网络变慢时,该过程Ksoftirq
将使用大部分(如果不是全部)处理能力。我Ksoftirq
发现处理 irq 请求的进程。此外,当网络速度变慢时,我使用 tshark 从路由器捕获数据包,并使用笔记本电脑上的 wireshark 查看数据包。捕获显示大量带有 TCP Dup ACK 和 TCP 重传的数据包。TCP Dup 和 TCP 重传的目的地是网络上的大多数计算机,但有些计算机的数量远远超过其他计算机。
该问题可能由什么原因导致的?
答案1
很有可能是您的路由器的以太网卡有问题,或者没有正确设置以用于此类用途。
现代服务器(或路由器)级千兆以太网卡提供中断合并和大型接收卸载 (LRO) 等服务,以防止主机处理器因每个数据包中断而过载。其他卸载功能(如传输分段卸载 (TSO) 和硬件校验和)也有助于减少主机处理器的繁忙程度,但不一定与中断相关。
确保您的以太网适配器能够实现这些功能,并且已完全启用它们。如果它不具备中断合并和 LRO 功能,请考虑升级到优质的服务器级以太网 NIC。
答案2
对你的问题的简短回答是肯定的,这些是路由器无法处理要求它处理的负载的迹象。CPU 大部分时间都在考虑如何处理收到的数据包,而更高级别的操作却无法进行。
显而易见的解决方案是将路由器换成具有更强大硬件的路由器。但是,优化路由器的配置也有可能。
例如,假设您有一堆端口被阻止。如果您使用规则测试每个被阻止的端口,那么大量的流量将必须通过这些规则中的每一个进行测试。如果 95% 的流量都流向端口 80,则在顶部添加“允许”规则将使大多数流量跳过大多数规则。同样,如果输入链有帮助,请在顶部添加“如果它是已建立连接的一部分则接受”规则。
路由器也可能内存不足,或者连接槽用尽。当路由器的连接槽位用尽时,它将拒绝建立新连接。当情况不好时,看看是否net.netfilter.nf_conntrack_count
接近net.netfilter.nf_conntrack_max
。如果是,并且您有内存,请提高限制。如果您没有内存,您可以稍微减少超时。
答案3
如果你正在使用 Wifi 路由器,那么你很可能正在遭受缓冲区膨胀。这是一个暂时的情况,可以通过循环路由器的电源来解决。