我們的Java應用程序由一個客戶端和一個服務器組成。在我們的生產環境中,建立連接需要很長時間(約40秒)。Java應用程序中的TCP握手很慢
start client > server SYN
2 milliseconds later server < client SYN,ACK
38 *seconds* later client > server ACK
在我們的其他環境中,發生的所有三個包幾乎瞬間:
我們使用tcpdump和可以看到下面的包是建立連接時捕獲的網絡流量。
任何人都可以提出什麼可能會導致38秒延遲,或建議步驟來診斷它?請注意,由於這是一個生產環境,因此我們很難對診斷代碼進行更改。
以下是關於我們的環境的一些細節:
- 客戶端使用SocketConnector從Apache Mina 1.0.1,其內部使用java.nio.channel.SocketChannel.connect(..)。
- 的客戶端的IBM WebSphere內部7.0.0.17
- Java版本1.6.0 =,Java編譯器= j9jit24,Java虛擬機的名稱= IBM J9 VM
- OS是AIX 6.1版本
是來自客戶端還是服務器的tcpdump? – 2012-07-10 16:03:16
我認爲tcpdump來自客戶端(不幸的是它並沒有被我捕獲)。 – 2012-07-12 16:29:32
然後慢慢來自客戶端。您可能想了解SYNC-ACK和ACK之間AIX堆棧上發生的事情。 – 2012-07-12 16:32:47