先贴代码!
private static MultiThreadedHttpConnectionManager connectionManager;
private static HttpConnectionManagerParams params;
private static HttpClient client;
private static void initConnection() {
connectionManager
= new MultiThreadedHttpConnectionManager();
params = connectionManager.getParams();
params.setConnectionTimeout(10 * 1000);
params.setSoTimeout(60 * 1000);
params.setDefaultMaxConnectionsPerHost(15);
params.setMaxTotalConnections(30);
params.setTcpNoDelay(true);
client = new HttpClient(connectionManager);
}
public void downLoad(String queryStr) {
HttpMethod method = new GetMethod(queryStr);
String results = "";
try {
client.executeMethod(method);
results = decompressGzip(method.getResponseBody());
} catch (IOException ex) {
System.out.println(ex);
} finally {
method.releaseConnection();
}
System.out.println(results);
}
private static void main(String args[])
{
initConection();
for(int i=0;i<8000;i++)//这里的网址只是随便举例,反正目的就是要请求一个网址(如http://www.example.com/)下查询字符串参数不同的页面几千次
{
downLoad("http://www.example.com/"+i);
}
}
执行以上程序访问URL大概七八千次的样子,每次都是大概到75%左右的时候就会出现卡顿,连接超时,打开浏览器任意网页都暂时访问不了,使用的是多线程(四个线程),卡住的时候netstat -n查看访问的服务器的连接数始终保持和线程设置开启的连接数量相等的数值左右,返回页面丢失的情况,大概过了几分钟程序又好了,网页也可以正常访问量,请问各位大神是什么情况!
可能是阻塞了,这就好像8000人同时涌入商城大门肯定会把大门堵上的,建议在循环中每次或每隔几次sleep几秒。