2013-01-07 42 views
0

我有一个tcp客户端和服务器在同一台主机上运行。客户端发送消息,服务器哎哟,客户端发送下一条消息。在任何时候,只有一个优秀的未发出信息。邮件大小是1KB。家用电脑运行CentOs 6.3和办公服务器运行RHEL 6.3同一主机上的tcp变化

当我在家用计算机上运行上述客户端服务器时,我得到了每秒大约41k条消息的非常一致的吞吐量。办公室服务器只有1%的CPU负载。但是,如果我在办公室服务器上运行相同的客户端/服务器,则吞吐量范围从18k-50k ....高度波动的吞吐量。谁能提供建议

  1. 什么可能导致tcp在同一主机上波动?

  2. 有关如何调试tcp性能的任何想法?

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

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

+0

'我的吞吐量从18K-50K'不等。 18k-50k是什么? K或k不是吞吐量的度量。 – EJP

回答

0

这里有一些可能性,我能想到的立刻道:

  • 丢包,从而导致拥塞窗口缩小(不大可能在你的情况在localhost)
  • 应用的瓶颈,这将导致接收器窗口缩小(比第一个更不可能)
  • 由于某种原因,流量整形适用于localhost。尝试tc qdisc,看看是否有什么关于。也看看iptables。
  • CPU调度限制您的客户端或服务器。你是否有通过cgroups强加的CPU份额,可能会不时抢占你的进程?
  • 间歇性开销,例如在测试期间从某处启动的日志记录,并延迟到达的数据包。或者IDS突然决定开始观看你的活动。
  • 测量不准确,例如运行测试的时间太短
  • 实时锁定降级,因为过多的队列抖动。本文提供了有关此类案例的良好洞察:https://cs.uwaterloo.ca/~brecht/papers/getpaper.php?file=usenix-2004.pdf
  • 客户端或服务器中存在一个错误。例如。你应该检查send()是否返回1024,如果没有则采取适当的行动,而不是假设没有错误的情况下所有事情都经过了。

我调试的方法就是:

  • 开始使用标准的测量工具,如iperf的(YUM安装iperf的)。然后在另一个终端上iperf -siperf -c localhost。你会得到稳定的结果,如果是的话,那么这个问题就是你的客户端和服务器中的一个错误。
  • 如果是TCP,则iperf定期提供一些诊断信息,如打印窗口大小。您还可以检查lo接口的丢包情况以及/ proc/sys/ipv4中的其他统计信息。
相关问题