问题很严重!请帮忙~~大神们!
先贴代码!
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查看访问的服务器的连接数始终保持和线程设置开启的连接数量相等的数值左右,返回页面丢失的情况,大概过了几分钟程序又好了,网页也可以正常访问量,请问各位大神是什么情况!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
可能是阻塞了,这就好像8000人同时涌入商城大门肯定会把大门堵上的,建议在循环中每次或每隔几次sleep几秒。
打开浏览器任意网页都暂时访问不了
你跑一个Java程序怎么会影响到你的浏览器?要是说死机了我可以理解,但是打不开网页就有点诡异了。难道是你的运营商把你封了?不可能吧
netstat看看是不是CLOSE_WAIT太多了,链接没有关闭占光了所有的可用链接。过几分钟就好了,我想应该是过了3分钟吧,这个是TCP默认关闭的时间。