在一个爬虫程序中遇到了以下异常:
java.net.SocketException No buffer space available (maximum connections reached?): JVM_Bind
我们知道,操作系统有它允许持有的最大文件句柄数,而在网络连接的过程中,每个socket请求都要占用一个文件句柄资源,如果没有及时释放,则可能会耗尽文件句柄资源.
通过检查代码,发现在使用HttpClient发送Get请求时没有释放资源,并且由于是多线程程序,很容易耗尽资源
改写后的代码如下:
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();
}