我们的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