2

を使用する次のコードがありますPoolingClientConnectionManager

public static void main(String[] args) {

    int NoOfSimultaneousRequest = 1000;
    int poolsize =1000;

    try{

        if (poolsize>0){

            mgr = new PoolingClientConnectionManager();
            mgr.setMaxTotal(poolsize);
            mgr.setDefaultMaxPerRoute(poolsize);
            httpclient  = new DefaultHttpClient(mgr); 
        }

        Thread [] tr = new Thread[NoOfSimultaneousRequest];
        for(int i=0;i<NoOfSimultaneousRequest;i++){
            MultipleThreadsTest multiTest = new MultipleThreadsTest();

            Thread t = new Thread(multiTest);
            tr[i] = new Thread(multiTest);
        }       

        for(int i=0;i<NoOfSimultaneousRequest;i++){
            tr[i].start();
        }

        for(int i=0;i<NoOfSimultaneousRequest;i++){
            tr[i].join();
        }

    }catch (Exception e){
        e.printStackTrace();
    }finally{

        if (mgr!=null){
            mgr.shutdown();
        }

        if (httpclient!=null){
            httpclient.getConnectionManager().shutdown();
        }
    }
}


public void run() {
    if (mgr==null){ //if no connection manager then create multiple instances of defaulthttpClient
        HttpClient  hc  = new DefaultHttpClient();                  
        response = invokeWebService(hc,"http://urltoPost") ;

    }else{ //if connection manager is used then use only one instance of httpclient
        response = invokeWebService(httpclient,"http://urltoPost") ;
    }   
}   


private static String invokeWebService(HttpClient httpClient,String url){
    HttpPost httpPost = new HttpPost(new URI(url));
    try{
        String response  = httpClient.execute(httpPost,new BasicResponseHandler());
        return response;
    }catch(Exception e){

    }finally{
        if (httpPost != null) {
            httpPost.releaseConnection();
        }
    }
}

私の問題は、プーリングをオフにすると (<= 0 に設定して)、プーリングがオン ( > 0)poolSizeの場合に比べてコードの実行速度が大幅に速くなることです。poolSizeこれら 2 つのバージョンの唯一の違いは、プーリングを使用している場合は のインスタンスが 1 つしかHttpClient作成されず (Apache が推奨)、プーリングがオフの場合は の複数のインスタンスHttpClientが作成されることです。HTTP 接続プールを使用すると、コードのパフォーマンスが向上するはずです。しかし、それは起こっていません。接続マネージャーの使用に問題はありますか?

4

1 に答える 1

0

これに基づいて、有効でサポートされている診断を行うことはできません。アプリケーションの実行速度が速い/遅い理由を調べるには、情報を収集する必要があります。そのためには、パフォーマンス テストを行う必要があります。そうしないと、暗闇の中で銃撃することになります。

まず、テスト中に全体的なシステム パフォーマンスの測定を開始し、両方のテスト ケースが同じ種類のワークロードを使用していることを確認します。

全体的なシステム パフォーマンスとは、まず CPU とメモリの使用率、飽和状態、およびエラーを意味します。コードの実行時間がどこにかかっているかを調べ、そこからさらに深く掘り下げる必要があります。

于 2014-05-26T20:09:38.343 に答える