Jboss調優——最佳線程數


 在設置jboss的參數中,maxThreads(最大線程數)和acceptCount(最大等待線程數)是兩個非常重要的指標,直接影響到程序的QPS。本文講解jboss連接的運行原理,以及如何設置這兩個參數。
     最佳線程數:
     在做壓力測試時,剛開始,隨着並發量的增加,QPS也會隨之增大,但當並發量超過一個閥值之后,QPS就不會再增大,甚至很多時候還會降低,類似於下圖。而這個閥值就是我們所說的最佳線程數,他也是設置jboss時的maxThreads參數時的重要指標。
       
     
     jboss連接的原理
     jboss連接的基本原理如下圖,一般情況下,當用戶訪問jboss服務器時,會先進入等待隊列,然后再到運行區被執行。運行區中連接的線程數量是固定的,也就是說cpu在同一時間內處理的用戶訪問數量也是固定的。
     而那些已經建立連接,但暫時還不能被cpu處理的,就在等待列隊中等待,直到運行區中有空閑時,才進入運行區被cpu執行的。而如果等待隊列也滿了,再有用戶申請連接,jboss就會直接直接拒絕掉。
     這樣做的目的是為了更好地利用系統資源(cpu,內存等)。試想,每個連接都是要占用系統資源的,假如jboss不做這樣的設置,一有連接請求,jboss馬上建立連接,內存消耗非常大,更加致命的是,隨着連接數量的增多,cpu用於調度的時間增大,用於計算的時間相對減少,這樣系統的性能就被活活拖垮了。
           
    
     在jboss中,acceptCount和maxThreads,這兩個參數就是用於設置分別對待隊列長度和運行區線程數。具體操作,進入JbOSS_HOME/server/default/deploy/jbossweb.sar/ 文件夾下,找到server.xml文件,修改這連個參數如下:
[c-sharp] view plain copy print?
  1. <Connector protocol="HTTP/1.1" port="9999" address="${jboss.bind.address}"  
  2.          connectionTimeout="20000" redirectPort="${jboss.web.https.port}"  
  3. maxThreads="150" acceptCount="8000"  
  4.  />  
 
 
       如何找到最佳連接數
      1. 根據公式計算 : 最佳線程數量=((線程等待時間+線程cpu時間)/線程cpu時間) * cpu數量
      2. 通過用戶慢慢遞增來進行性能壓測,觀察 QPS,響應時間。
      這里重點講講第二種方法。
      首先在jboss的設置上,maxThreads值要設置得盡量大,以便壓力都能壓到cpu上。這同時也要注意,線程連接是占用內存資源的,假如maxThreads太大了,可能會消耗完所有內存,最終造成程序崩潰。
      具體步驟。我以自己最近做的壓力測試,並從中找到最佳線程數為例進行進行說明
      我先設置的maxThreads=2000,acceptCount=4000。測試結果如下,橫軸表示並發量,縱軸表示QPS
      
         跟據上圖,我們就可以大致知道這個系統的最佳線程數是在紅色區間范圍內。
 
       真實的maxThreads的設置
      但在真實環境中,maxThreads的值要略大於壓力測試時得到的最佳線程數。這是因為系統依靠的資源是可能發生變化的,比如原先系統在壓力測試得到的最佳線程數是30,我們設置maxThreads也是30的話,但在真實運行時,可能突然有段時間,IO的響應變慢,這樣造成的就是是最佳線程數可能變成35,這樣cpu資源就白白被浪費了,QPS降低.所以在設置maxThreads時,留下一切緩沖余地還是很有必要的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM