2011-03-22 66 views
12

因此,對於tomcat,您可以設置acceptCount值(默認值爲100),這意味着所有工作線程都忙時 - 將新連接放入隊列中(直到它已滿爲止,之後他們被拒絕)。測量用於tomcat的排隊請求數

我想監視此隊列中項目的大小 - 但無法解決是否有辦法通過JMX獲取(即不是最大隊列大小 - 這只是配置,但是當前的項目數量在隊列中)。

任何想法讚賞。

配置爲Tomcat:http://tomcat.apache.org/tomcat-6.0-doc/config/http.html(搜索 「acceptCount」)

回答

6

thread on the mailing列表和the reply from Charles表明,沒有這樣的JMX存在。從查

引用:「因爲它是由OS的通訊 堆棧保持注意, 接受隊列不給Tomcat, 可見。」

從大衛

引用:「不幸的是,由於 Tomcat的一無所知在接受隊列中的 請求......」

有沒有辦法得到這個信息(請求多少是 接受隊列?)out?

不,接受隊列完全不可見 。只有通訊棧知道 什麼,並且沒有 API我知道排隊 內容 - 因爲內容還沒有收到 ,只有連接 請求。

根據您的真正的問題是什麼(即用於測量接受隊列是Tomcat還沒有開始處理。第請求)如果你正在尋找一個「節流解決方案」看到這follow-up on the same thread

+0

有趣的是,我懷疑。我知道在碼頭你可以讓請求排隊(這聽起來像某人在ML上提出的解決方案之一) - 但這與tomcat目前的做法有些不同。 – 2011-03-22 22:07:46

+0

@Michael:我對你的用例很感興趣。你想過濾掉某些URL模式還是優先考慮任何servlet - 也就是說爲什麼要監視未決的請求。 – JoseK 2011-03-23 02:54:15

+0

實際上,我對服務器的整體「負載」度量更感興趣 - 即觸發監控事件。 – 2011-04-03 03:06:43

2

接受隊列無法被監控,但是您可以使用執行器獲取用於tomcat的排隊請求數。

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="20" minSpareThreads="10" maxQueueSize="30" /> 
<Connector port="8080" protocol="HTTP/1.1" executor="tomcatThreadPool" connectionTimeout="20000" redirectPort="8443" maxConnections="50" /> 

配置maxThreads = 「20」指線程池具有20名工人至多,可以同時處理20個請求。

maxQueueSize =「30」表示線程池最多可排隊處理30個未處理的請求。因此,您可以通過JMX監視queueSize屬性以獲取排隊請求的數量。

但默認情況下,線程池隊列再也不會擔任任何請求,因爲MAXCONNECTIONS默認值是maxThreads的值,這意味着當所有工人都很忙,新的請求在接受隊列中排隊。

通過設置maxConnections =「50」,tomcat可以接受比maxThreads(20)更多的請求。在上面的例子中,Executor線程池可以處理20個請求,額外的30個請求將保存在線程池隊列中,更多的請求將進入隊列。

所以現在你可以監視使用的MBean在線程池排隊的請求數量「卡塔利娜:類型=執行人,名稱= tomcatThreadPool」和屬性名「QUEUESIZE」