Возможно, у вас заканчивается эфемерный порт .Это происходит под нагрузкой, когда многие недолговечные соединения быстро открываются и закрываются.Стандартная Java HttpURLConnection
не даст вам гибкости, необходимой для установки правильных опций сокетов.Я рекомендую перейти к проекту Apache HttpComponents и настроить параметры следующим образом ...
...
HttpGet httpGet = new HttpGet(uri);
HttpParams params = new BasicHttpParams();
params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 16 * 1000); // 16 seconds
params.setParameter(CoreConnectionPNames.SO_REUSEADDR, true); // <-- teh MOJO!
DefaultHttpClient httpClient = new DefaultHttpClient(connectionManager, params);
BasicHttpContext httpContext = new BasicHttpContext();
HttpResponse httpResponse = httpClient.execute(httpGet, httpContext);
StatusLine statusLine = httpResponse.getStatusLine();
if (statusLine.getStatusCode() >= HTTP_STATUS_CODE_300)
{
...
Я пропустил некоторый код, например, настройку connectionManager, но вы можете получить его изих документы.
[Обновление] Вы также можете добавить params.setParameter(CoreConnectionPNames.SO_LINGER, 1);
, чтобы эфемерные порты не задерживались до восстановления.