2013-04-02 3 views
2

Я следующий код, который использовать PoolingClientConnectionManager: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(); 
     } 
    } 
} 

Моя проблема заключается в том, что, когда я выключаю Объединив (установив poolSize < = 0) код выполняет намного быстрее по сравнению с тем, когда пулы на (poolSize> 0). Единственное различие между этими двумя версиями заключается в том, что при использовании пула создается только один экземпляр HttpClient (как рекомендовано Apache), а при отключении пула создаются несколько экземпляров HttpClient. Предполагается, что код будет работать лучше, если я использую пул соединений HTTP. Но этого не происходит. Вы видите какую-либо проблему в моем использовании диспетчера соединений?

ответ

0

Вы не можете сделать правильный и поддерживаемый диагноз на основе этого. Чтобы узнать, почему ваше приложение работает быстрее/медленнее, вам необходимо собрать информацию, для этого вам нужно будет выполнить тестирование производительности. В противном случае вы просто стреляете в темноте.

Для начала в вашем случае я бы начал измерять общую производительность системы во время теста, убедившись, что оба тестовых примера используют одну и ту же рабочую нагрузку.

По общей производительности системы я подразумеваю использование, насыщенность и ошибки на процессоре и памяти для начала. Вам нужно выяснить, где будет время выполнения вашего кода и начать копать глубже оттуда.

Смежные вопросы