2011-10-17 90 views
1

在線程相關的Tomcat的Mbeans我看到Catalina.ThreadPool下。Tomcat線程監視Mbeans描述

有不同的屬性, maxThreads,currentThreadCount,currentThreadsBusy等

所以,我在哪裏可以得到這些MBean屬性, 什麼這些屬性的說明,我需要包括這在我的監控自動化代碼的描述,這將提供線程利用率統計。

也可能我希望看到源代碼,我在哪裏可以得到它?

當我看到Mbean類名(通過jconsole)時,它顯示爲org.apache.tomcat.util.modeler.BaseModelMBean,但是當我通過BaseModelMBean的源代碼時,看到沒有字段或數據成員表示上面提到的這些屬性是這個類的一部分或者它實現的接口。

然後在這裏代表Mbean的哪個實現?

回答

0

您可以在JIoEndpoint瞭解getCurrentThreadCount(),getCurrentThreadsBusy()和maxThreads: JavadocSource

1

maxThreads,currentThreadCount,currentThreadsBusy JMX特性涉及到Tomcat連接器使用來處理傳入請求的線程池。您可以在應用程序線程列表中看到通常名爲http-nio-[port-number]-exec-[sequence-number]的線程。 當請求到達連接器時,後者通過線程池爲其分配一個特定的線程,該線程將「繁忙」,直到請求被處理。所以,currentThreadsBusy反映了當前正在處理的請求的數量。

maxThreads定義了在任何情況下不希望超出的線程數。當currentThreadsBusy計數器達到maxThreads閾值時,不能處理更多的請求,並且應用程序阻塞。

currentThreadCount表示線程的線程池已眼下,無論是繁忙和自由,線程池將終止某些線程,如果他們不使用,一定時間或創建新的,最多maxThreads量,如果有需求,請看下面的細節。

「Under hood」中,自從Tomcat 7以來,它是org.apache.tomcat.util.net.AbstractEndpoint,除其他外,它負責線程管理。如果它使用java.util.concurrent.ThreadPoolExecutor作爲線程池(默認選項),則maxThreads映射到ThreadPoolExecutor的maximumPoolSize,currentThreadsBusy - 到activeCount,並且currentThreadCount - 到poolSize

話雖如此,currentThreadsBusy是用於監視Web應用程序的健康的最好的選擇。 maxThreads更像是一個靜態值(除非您隨意動態更改它)。 currentThreadCount 可能會提供一些有用的信息,並有一定的時間滯後。