Очень медленное рукопожатие TCP в приложении Java

Наше Java-приложение состоит из клиента и сервера. В нашей производственной среде установка соединения занимает много времени (~40 секунд).

Мы захватили сетевой трафик с помощью tcpdump и видим следующие пакеты при установлении соединения:

start                  client > server SYN
2 milliseconds later   server < client SYN,ACK
38 *seconds* later     client > server ACK

В других наших средах все три пакета происходят почти мгновенно.

Может ли кто-нибудь предложить, что может вызвать 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
  • ОС - AIX, версия 6.1

person Phil Harvey    schedule 10.07.2012    source источник
comment
Является ли tcpdump клиентом или сервером?   -  person Marcus Adams    schedule 10.07.2012
comment
Я думаю, что tcpdump исходит от клиента (к сожалению, я его не перехватил).   -  person Phil Harvey    schedule 12.07.2012
comment
Тогда медлительность от клиента. Вы можете прочитать о том, что происходит в стеке AIX между SYNC-ACK и ACK.   -  person Marcus Adams    schedule 12.07.2012


Ответы (1)


у вас не заканчивается дескриптор и / или ваша очередь приема TCP заполнена?

person Julien Vermillard    schedule 11.07.2012
comment
Вы имеете в виду клиентскую или серверную часть? Причина, по которой я спрашиваю, заключается в том, что я предполагаю, что очередь принятия актуальна только на стороне сервера, и я не думаю, что здесь возникает задержка. - person Phil Harvey; 12.07.2012