java.net.SocketException: нет свободного места в буфере (достигнуто максимальное количество подключений?): connect

Привет, я использую Apache HTTP Client 4.0 для загрузки некоторых файлов на сервере на основе протокола HTTPS. Загруженное приложение работает 24×7. Сегодня неожиданно он начал бросать это исключение –

java.net.SocketException: No buffer space available (maximum connections reached?): connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source) at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:333) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:123) at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:147) at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:101) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:381) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554) 

Кто-нибудь может мне помочь, пожалуйста! Я совершенно не понимаю, что происходит?

Это исходный код, который загружает файл –

 public File call() throws Exception { HttpClient httpclient = new DefaultHttpClient(); try{ httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); /* * Create POST REQUEST */ HttpPost httpPost = new HttpPost(this.URL); /* * Create MultipartRequestEntity */ MultipartEntity multipartEntity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE ); /* * Add POST Parameters */ multipartEntity.addPart(parameters[0], this.fileBody); multipartEntity.addPart(parameters[1], new StringBody(this.TYPE)); multipartEntity.addPart(parameters[2], new StringBody(this.MAAID)); /* * Add this POST Method */ httpPost.setEntity(multipartEntity); /* * Upload the file */ HttpResponse response = httpclient.execute(httpPost); int responseCode = response.getStatusLine().getStatusCode(); logger.info("Response Code of HTTP Connectivity ["+ responseCode + "], " + "it means ["+ response.getStatusLine().getReasonPhrase()+"]"); /* * Check the server Response */ HttpEntity entity = response.getEntity(); if(entity != null){ String status = EntityUtils.toString(entity); logger.info("Status of file upload from Server >>"+ status+"<<"); entity.consumeContent(); if(status.equalsIgnoreCase("OK")){ return this.fileBody.getFile(); } }else{ logger.error("Unable to retrieve status of file upload from server"); } }catch(NoRouteToHostException e){ logger.error("Internet connection to ["+ this.URL + "] is not available", e); }catch(SocketException e){ logger.error("Unable to connect to "+ this.URL, e); }catch (Exception e) { logger.error("Exception while uploading the file["+ this.fileBody.getFilename()+ "] on ["+ this.URL+"]", e); }finally{ try{ httpclient.getConnectionManager().shutdown(); }catch(Exception e){ // Ignore this exception } } return null; } 

Мое предположение: у вас закончились порты, и проблема не связана напрямую с вашим кодом, а с текущим состоянием вашего сервера. Слишком много соединений открываются другим машинам, и это вызывает проблему.

Что искать:

  • Является ли ваш сервер чрезмерным, что может привести к открытию нескольких сетевых подключений?
  • Документация клиента HTTP рекомендует создать экземпляр только одного HttpClient и повторно использовать этот экземпляр. Это случаи, когда копирование нескольких HTTP-клиентов и неправильное удаление соединений приводят к сбоям сетевых подключений и никогда не закрываются. Попробуйте httpPost.releaseConnection() . Вы также можете быть заинтересованы в документации клиента HTTP, глава 1.1.5, «Обеспечение выпуска ресурсов низкого уровня»,

Сервер имеет несколько «Эфемерный порт», определенный следующим образом: http://dbaktiar-on-java.blogspot.ro/2010/03/hudson-shows-buffer-space-available.html http: // поддержка. microsoft.com/kb/196271

Это решено: последовали шаги выше «из сокетов».

Проблема ограничена сервером 2003 года.

Может случиться, что ваш сервер (firebase database / Http) исчерпан из-за соединений. Использование пула соединений или сокращение максимальных подключений может решить эту проблему.

Это, по-видимому, проблема Windows, или о эфемерных портах, или об ошибке в файле afd.sys, в зависимости от вашей версии Windows. Пожалуйста, обратитесь к моему ответу на аналогичный вопрос о stackoverflow