2013-01-07 83 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中的其他統計信息。
相關問題