gpt4 book ai didi

linux - 同一主机上的 TCP 可变性

转载 作者:太空宇宙 更新时间:2023-11-04 04:19:49 26 4
gpt4 key购买 nike

我有一个在同一主机上运行的 TCP 客户端和服务器。客户端发送消息,服务器确认该消息,然后客户端发送下一条消息。在任何时刻,都只有一条未处理的未确认消息。消息大小为 1KB。家庭计算机运行CentOs 6.3,办公服务器运行RHEL 6.3

当我在家用计算机上运行上述客户端服务器时,我得到了每秒大约 41k 消息的非常稳定的吞吐量。办公室服务器的CPU负载只有1%。但是,如果我在办公室服务器上运行相同的客户端/服务器,我得到的吞吐量范围为 18k-50K....吞吐量波动很大。任何人都可以提供建议

  1. 同一主机上 TCP 波动的可能原因是什么?

  2. 关于如何调试 TCP 性能有什么想法吗?

更新:-我没有使用环回地址,而是分配给 eth1 的 IP。尽管 eth1 的 IP 不在/etc/hosts 中也没关系,因为第一个请求会导致查找被缓存。

更新1:-在环回地址上运行会产生相同的波动输出。另外,当我查看 cat/proc/interrupts 时,我看到每个 NIC 有 5 个 rx 队列和 1 个 tx 队列。是 5rx 队列导致变化吗?

最佳答案

以下是我立即想到的一些可能性:

  • 数据包丢失,这会导致拥塞窗口缩小(在本地主机上的情况下不太可能)
  • 应用程序瓶颈,这将导致接收窗口缩小(比第一个更不可能)
  • 由于某种原因适用于本地主机的流量整形。尝试 tc qdisc 并查看 lo 上是否有内容。另请查看 iptables。
  • CPU 调度限制您的客户端或服务器。您是否通过 cgroup 强加了 CPU 共享,可能会不时抢占您的进程?
  • 间歇性开销,例如在测试期间从某个地方开始记录并延迟数据包到达。或者 IDS 突然决定开始监视您的事件。
  • 测量不准确,例如运行测试的时间太短
  • 由于过多的队列抖动而导致实时锁性能下降。本文对此类案例提供了很好的见解:https://cs.uwaterloo.ca/~brecht/papers/getpaper.php?file=usenix-2004.pdf
  • 您的客户端或服务器中的错误。例如。您应该检查 send() 是否返回 1024,如果没有返回,则采取适当的操作,而不是假设如果没有错误就一切顺利。

我调试这个的方法是:

  • 首先使用标准测量工具,例如 iperf (yum install iperf)。然后在一个终端上使用 iperf -s,在另一个终端上使用 iperf -c localhost。您是否获得稳定的结果?如果是,那么问题是您的客户端和服务器中的错误。
  • 如果是 TCP,则 iperf 会提供一些诊断信息,例如定期打印窗口大小。您还可以检查 lo 接口(interface)的数据包丢失情况,以及/proc/sys/ipv4 中的其他统计信息。

关于linux - 同一主机上的 TCP 可变性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14189669/

26 4 0
文章推荐: c++ - 通过 MPI 发送和接收二维数组
文章推荐: javascript - 谷歌地图不显示在 HTML
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com