问题很严重!请帮忙~~大神们!

先贴代码!

    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查看访问的服务器的连接数始终保持和线程设置开启的连接数量相等的数值左右,返回页面丢失的情况,大概过了几分钟程序又好了,网页也可以正常访问量,请问各位大神是什么情况!

阅读 2.5k
3 个回答

可能是阻塞了,这就好像8000人同时涌入商城大门肯定会把大门堵上的,建议在循环中每次或每隔几次sleep几秒。

打开浏览器任意网页都暂时访问不了


你跑一个Java程序怎么会影响到你的浏览器?要是说死机了我可以理解,但是打不开网页就有点诡异了。难道是你的运营商把你封了?不可能吧

netstat看看是不是CLOSE_WAIT太多了,链接没有关闭占光了所有的可用链接。过几分钟就好了,我想应该是过了3分钟吧,这个是TCP默认关闭的时间。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏