2014-06-18 16:35
8331人閱讀收藏
舉報
apache tomcat(29)
作者同類文章x
程式調優(19)
作者同類文章x
tomcat的maxthreads、acceptcount(最大執行緒數、最大排隊數)
url:
tomcat 的connector配置如下
其中最後兩個引數意義如下:
maxthreads:tomcat起動的最大執行緒數,即同時處理的任務個數,預設值為200
acceptcount:當tomcat起動的執行緒數達到最大時,接受排隊的請求個數,預設值為100
這兩個值如何起作用,請看下面三種情況
情況1:接受乙個請求,此時tomcat起動的執行緒數沒有到達maxthreads,tomcat會起動乙個執行緒來處理此請求。
情況2:接受乙個請求,此時tomcat起動的執行緒數已經到達maxthreads,tomcat會把此請求放入等待佇列,等待空閒執行緒。
情況3:接受乙個請求,此時tomcat起動的執行緒數已經到達maxthreads,等待佇列中的請求個數也達到了acceptcount,此時tomcat會直接拒絕此次請求,返回connection refused
maxthreads如何配置
一般的伺服器操作都包括量方面:1計算(主要消耗cpu),2等待(io、資料庫等)
第一種極端情況,如果我們的操作是純粹的計算,那麼系統響應時間的主要限制就是cpu的運算能力,此時maxthreads應該盡量設的小,降低同一時間內爭搶cpu的執行緒個數,可以提高計算效率,提高系統的整體處理能力。
第二種極端情況,如果我們的操作純粹是io或者資料庫,那麼響應時間的主要限制就變為等待外部資源,此時maxthreads應該盡量設的大,這樣 才能提高同時處理請求的個數,從而提高系統整體的處理能力。我在測試時遇到乙個問題,maxthreads我設定的比較大比如3000,當服務的執行緒數大到一定程度時,一般是2000出頭,單次請求的響應時間就會急劇的增加,
cpu把大多數時間都用來在這2000多個執行緒直接切換上了,當然cpu就沒有時間來處理我們的程式了。
以前一直簡單的認為多執行緒=高效率。。其實多執行緒本身並不能提高cpu效率,執行緒過多反而會降低cpu效率。
當cpu核心數《執行緒數時,cpu就需要在多個執行緒直接來回切換,以保證每個執行緒都會獲得cpu時間,即通常我們說的併發執行。
所以maxthreads的配置絕對不是越大越好。
現實應用中,我們的操作都會包含以上兩種型別(計算、等待),所以maxthreads的配置並沒有乙個最優值,一定要根據具體情況來配置。
最好的做法是:在不斷測試的基礎上,不斷調整、優化,才能得到最合理的配置。
acceptcount的配置,我一般是設定的跟maxthreads一樣大,這個值應該是主要根據應用的訪問峰值與平均值來權衡配置的。
如果設的較小,可以保證接受的請求較快相應,但是超出的請求可能就直接被拒絕
如果設的較大,可能就會出現大量的請求超時的情況,因為我們系統的處理能力是一定的。
多執行緒和佇列
queue.h pragma once include include include include include define n 100 佇列長度 struct queue typedef struct queue queue 簡寫 void init queue p 初始化 intisem...
執行緒池中線程和佇列
執行緒池中的佇列分兩種,有界佇列和無界佇列,當使用有界佇列的時候,新加入乙個任務會先判斷核心執行緒是否有空閒的,如果有,就直接使用執行緒執行,如果沒有,會看看有界佇列是否已滿,如果未滿,則將任務加入有界佇列中,等核心執行緒有空閒的時候再去從佇列中獲取執行,如果有界佇列已滿,這個時候就會看看正在執行的...
python佇列和執行緒的學習
近期在研究一篇用python語言批量探測 指令碼時,這個指令碼值得研究的的是用了queue和threading的第三方庫 queue.queue 是一種先進先出 fifo 的資料結構。它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作。進行插入操作的端稱為隊尾,進行刪...