java.net.SocketException: No buffer space available的解决方法及总结

在一个爬虫程序中遇到了以下异常:
java.net.SocketException No buffer space available (maximum connections reached?): JVM_Bind

我们知道,操作系统有它允许持有的最大文件句柄数,而在网络连接的过程中,每个socket请求都要占用一个文件句柄资源,如果没有及时释放,则可能会耗尽文件句柄资源.
通过检查代码,发现在使用HttpClient发送Get请求时没有释放资源,并且由于是多线程程序,很容易耗尽资源
改写后的代码如下:
  HttpClient client = new HttpClient();   
  GetMethod method = null;   
  try {   
     method = new GetMethod(crawlerURL.getUURI().getEscapedURI());   
     statusCode = client.executeMethod(method);   
     //...   
  }finally {   
    if (null != method)   
    method.releaseConnection();   
  }

你可能感兴趣的:(java,jvm,多线程,.net,socket)