Jboss調優——最佳線程數

在設置jboss的參數中,maxThreads(最大線程數)和acceptCount(最大等待線程數)是兩個很是重要的指標,直接影響到程序的QPS。本文講解jboss鏈接的運行原理,以及如何設置這兩個參數。      最佳線程數:web

     在作壓力測試時,剛開始,隨着併發量的增長,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文件,修改這連個參數以下spa

  1. <Connector protocol="HTTP/1.1" port="9999" address="${jboss.bind.address}"
    線程

  2.                connectionTimeout="20000" redirectPort="${jboss.web.https.port}"
    orm

  3.       maxThreads="150" acceptCount="8000"
    server

  4.        />xml

 如何找到最佳鏈接數       1. 根據公式計算: 最佳線程數量=((線程等待時間+線程cpu時間)/線程cpu時間) * cpu數量

      2. 經過用戶慢慢遞增來進行性能壓測,觀察QPS,響應時間。

      這裏重點講講第二種方法。

      首先在jboss的設置上,maxThreads值要設置得儘可能大,以便壓力都能壓到cpu上。這同時也要注意,線程鏈接是佔用內存資源的,假如maxThreads太大了,可能會消耗完全部內存,最終形成程序崩潰。

      具體步驟。我以本身最近作的壓力測試,並從中找到最佳線程數爲例進行進行說明

      我先設置的maxThreads=2000,acceptCount=4000。測試結果以下,橫軸表示併發量,縱軸表示QPS

  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.        />

跟據上圖,咱們就能夠大體知道這個系統的最佳線程數是在紅色區間範圍內。       真實的maxThreads的設置

      但在真實環境中,maxThreads的值要略大於壓力測試時獲得的最佳線程數。這是由於系統依靠的資源是可能發生變化的,好比原先系統在壓力測試獲得的最佳線程數是30,咱們設置maxThreads也是30的話,但在真實運行時,可能忽然有段時間,IO的響應變慢,這樣形成的就是是最佳線程數可能變成35,這樣cpu資源就白白被浪費了,QPS下降.因此在設置maxThreads時,留下一切緩衝餘地仍是頗有必要的。

相關文章
相關標籤/搜索