Мы сталкивались с этим в подобном случае с вашим.Обычно при высокой нагрузке и непросто воспроизвести на тесте.Пока не исправили, но это шаги, которые мы прошли.
Если это проблема с брандмауэром, мы получим отказ в подключении или исключение SocketTimeout.
1) Вы можете отслеживатьэти запросы в журнале доступа на сервере - показывают ли они статус HTTP 200 или 404 или что-то еще?В нашем случае журналы сервера (в данном случае IIS) показали, что клиент закрыл соединение, а не сервер.Так что это было загадкой.
Обновление: Если клиент всегда получает 200, то сервер фактически отправил обратно некоторый ответ, но я подозреваю, что размер байта ответа (если это записанов журналах доступа) покажет значение, отличное от значения обычного размера ответа для этого запроса.
Если он показывает тот же размер ответа, то у вас есть (может быть невероятное) условие, что сервер действительно ответил правильно , но клиент не получил ответ обратно, потому что соединение разорвано где-то посередине.
2) Группы сетевых администраторов посмотрели на TCP / IPтрафик, чтобы определить, какой конец (или промежуточный маршрутизатор) завершает диалог HTTP / TCP-IP.И как только мы понимаем, с какой целью заканчивается соединение, стоит посмотреть, почему.Кто-то, обладающий достаточными знаниями, может выполнить snoop
3) На сервере настроено / ограничено максимальное количество запросов - и это ограничивает ваши соединения?
4)Есть ли промежуточные балансировщики нагрузки, при которых запросы могут быть отброшены?
Обновление: Еще одна вещь, которую мы хотели, но не выполнили, - это создать статический маршрут между клиентом и сервером, чтобы уменьшитьколичество переходов между ними и убедитесь, что сетевое соединение не прерывается.См. http://en.wikipedia.org/wiki/Static_routing
5) Другим предложением является настройка ConnectTimeout , чтобы увидеть, работают ли они с более высоким значением. Обновление: Возможно, вы захотите попробовать conn.getErrorStream ()
Возвращает поток ошибок, если соединение не удалось, но сервер тем не менее отправил полезные данные.Если соединение не было подключено, или если у сервера не было ошибки при подключении, или если сервер имел ошибку, но данные об ошибках не были отправлены, этот метод возвратит нуль.
6) Возможнотакже попробуйте выполнить набор дампов потоков на сервере с интервалом в 5 секунд, чтобы увидеть, показывает ли какой-либо поток эти входящие запросы на сервере.
Обновление: На сегодняшний день мы научились жить сэта проблема, потому что мы насчитали 200-300 из 400 000 запросов в день, что составляет 0,00075%