小编Rub*_*oms的帖子

tcpdump 提高 udp 性能

我正在运行一组负载测试以确定以下设置的性能:

Node.js test suite (client) --> StatsD (server) --> Graphite (server)
Run Code Online (Sandbox Code Playgroud)

简而言之,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
Run Code Online (Sandbox Code Playgroud)

在一个特定的测试案例中,我发送 40000 个指标/秒。运行tcpdump的测试有4%左右的丢包,没有的时候有20%左右的丢包

两个系统都作为 Xen VM 运行,具有以下设置:

  • 英特尔至强 E5-2630 v2 @ 2.60GHz
  • 2GB 内存
  • Ubuntu 14.04 x86_64

我已经检查过潜在原因的事情:

  • 增加 UDP 缓冲区接收/发送大小。
  • CPU 负载影响测试。(最大负载 40-50%,客户端和服务器端)
  • 在特定接口而不是“任何”上运行 tcpdump。
  • 使用“-p”运行 tcpdump 以禁用混杂模式。
  • 仅在服务器上运行 tcpdump。这导致发生 20% …

performance udp tcpdump graphite statsd

13
推荐指数
2
解决办法
2009
查看次数

标签 统计

graphite ×1

performance ×1

statsd ×1

tcpdump ×1

udp ×1