tcpdump提高udp性能
我正在运行一组负载测试以确定以下设置的性能: Node.js test suite (client) --> StatsD (server) --> Graphite (server) 简而言之,node.js测试套件每隔x秒就会向另一台服务器上的StatsD实例发送一定数量的指标。然后,StatsD每秒将指标刷新到位于同一服务器上的Graphite实例。然后,我查看测试套件实际发送了多少度量,以及Graphite收到了多少度量,以确定测试套件与Graphite之间的数据包丢失。 但是我注意到有时我会有非常大的丢包率(注意它是通过UDP协议发送的),范围从20%到50%。因此,当我开始查看这些数据包的丢弃位置时,发现StatsD可能是一些性能问题。因此,我开始记录系统各个部分的指标,以跟踪发生此下降的位置。这就是事情变得奇怪的地方。 我正在使用tcpdump创建一个捕获文件,在测试运行完成后检查该文件。但是每当我在运行tcpdump的情况下运行测试时,几乎都不存在数据包丢失的情况!看起来tcpdump某种程度上提高了我的测试性能,但我不知道为什么以及如何做到这一点。我正在运行以下命令来在服务器和客户端上记录tcpdump消息: tcpdump -i any -n port 8125 -w test.cap 在一个特定的测试案例中,我正在发送40000个指标/秒。运行tcpdump时的测试的数据包丢失率约为4%,而没有进行测试的数据包丢失率约为20% 这两个系统均通过以下设置作为Xen VM运行: 英特尔至强E5-2630 v2 @ 2.60GHz 2GB RAM Ubuntu 14.04 x86_64 我已经检查过的潜在原因: 增加UDP缓冲区的接收/发送大小。 影响测试的CPU负载。(客户端和服务器端的最大负载为40-50%) 在特定接口而不是“ any”上运行tcpdump。 使用'-p'运行tcpdump以禁用混杂模式。 仅在服务器上运行tcpdump。这导致发生20%的数据包丢失,并且似乎不影响测试。 仅在客户端上运行tcpdump。这样可以提高性能。 将netdev_max_backlog和netdev_budget增加到2 ^ 32-1。这没什么区别。 在每个nic上尝试了混杂模式的所有可能设置(服务器打开和客户端关闭,服务器关闭和客户端打开,都打开,都关闭)。这没什么区别。