轉載請聲明出處!html
Tomcat Manager是一個Tomcat內置的管理界面, 管理界面隨Tomcat的每次安裝一塊兒啓動,提供包括快速入門指南和相關文檔的連接。經過此界面,您能夠查看Tomcat指標,並經過JMX代理Servlet查詢指標數據。java
雖然管理界面是開箱即用的,可是在沒有設置適當的用戶和角色以前,您將沒法訪問。Tomcat提供多個角色訪問Tomcat Manager,主要的兩個角色是:web
manager-jmx :提供對JMX代理servlet和Tomcat服務器狀態頁面的訪問apache
manager-gui :授予對Tomcat應用程序管理器的訪問權限,您能夠在其中運行診斷程序並手動觸發垃圾回收瀏覽器
若是須要從管理界面訪問Tomcat指標,您須要爲用戶分配適當的角色。您能夠經過更新Tomcat的conf / tomcat-users.xml配置文件來完成此操做:tomcat
<role rolename="manager-gui"/>
<role rolename="manager-jmx"/>
<user username="tomcat-jmx" password="<YOUR_PASSWORD>" roles="manager-jmx,manager-gui"/>
複製代碼
此代碼段首先定義了咱們要分配給用戶的兩個角色。而後,它建立一個新的 tomcat-jmx
用戶,爲其分配這些角色,併爲用戶設置密碼。若是您使用全新安裝的Tomcat,則須要建立一個新用戶; 不然,您能夠將角色分配給現有用戶。安全
默認狀況下,能夠從 http://localhost:8080
本地訪問Tomcat Manager,你也能夠在Tomcat的服務器配置文件中進行更改。當你訪問Web界面前,系統將提示您登陸。主要的數據指標以下:bash
服務器和應用程序狀態頁面 :顯示JVM,鏈接器和應用程序指標的高級概述,包括內存使用,線程計數和請求處理時間服務器
應用程序管理器 :提供診斷工具,用於調查應用程序中的內存泄漏app
JMX代理 :用於查詢Tomcat指標的基於文本的界面
應用程序和服務器狀態的高級視圖 ,能夠導航到 /manager/status
頁面或單擊主頁上的「Server Status」按鈕。此頁面包含有關Tomcat服務器及其AJP和HTTP鏈接器的信息,以及JVM的內存使用狀況。
每一個鏈接器部分顯示有關線程使用狀況的信息(例如,最大線程數,當前線程數和當前繁忙線程數)以及請求吞吐量和性能(例如,處理時間,錯誤計數和接收的字節數),以及每一個鏈接器的信息。
每一個線程在處理請求時都會經歷一系列階段:
**就緒(Ready):**該線程可用於處理請求。
**解析和準備請求(Parse and prepare request):**該線程正在解析請求頭或準備讀取請求的主體。
**服務(Service):**線程正在處理並生成傳入請求的響應。
**完成(Finishing):**線程已完成處理請求並將生成的響應發送回客戶端。
**Keep-Alive:**線程保持鏈接打開,以便同一客戶端發送另外一個請求。此階段的最長持續時間由服務器配置文件中設置的 keepAliveTimeout
值肯定。鏈接超時後,線程返回就緒階段。
線程階段能夠幫助您準確地衡量準備接受傳入請求的線程數。您還能夠在服務器狀態頁面上的Tomcat應用程序列表中查看每一個已部署應用程序的請求計數。
若是要查看全部已部署應用程序的狀態,您能夠導航到 manager/status/all
頁面。此頁面(頁面往下拉)列出了全部應用程序,包括Tomcat Manager自己,所以您能夠快速查看處理時間,活動會話以及爲每一個應用程序加載的JSP servlet數量。
要運行診斷程序,您能夠在 /manager/html
導航到Tomcat的應用程序管理器界面,或者單擊Tomcat Manager主頁上的「Manager App」按鈕。應用程序管理器提供了一個用於快速管理應用程序的簡單界面,以及用於排除內存泄漏故障的診斷部分。
「Find leaks」按鈕能夠對應用程序中的內存泄漏運行診斷檢查。當垃圾收集器沒法經過刪除應用程序再也不須要的對象來釋放工做內存時,會發生內存泄漏。這會致使應用程序使用更多資源,直到它用完爲止,從而產生致命的內存錯誤甚至內存溢出。請注意,應謹慎使用此診斷檢查,由於它會觸發垃圾回收,對性能有必定的影響。
這個界面只是簡單的訪問Tomcat服務器的狀態,使您可以快速查看相關數據。後面的章節會有詳細的講解。
Tomcat Manager可使用 manager-jmx
角色訪問JMX代理servlet,該角色容許您從Web瀏覽器查詢。您能夠在 http://localhost:8080/manager/jmxproxy
找到Tomcat的可用MBean列表(純文本格式)。
若是要查詢特定MBean的數據,能夠按如下格式將參數添加到MBean的域,類型,名稱和屬性的URL中:
http://localhost:8080/manager/jmxproxy/?get=<DOMAIN>:type=<TYPE>,name="<NAME>"&att=<JMX_ATTRIBUTE>
複製代碼
在上述的JMX屬性和MBean列中找到這些參數。您可使用如下命令查看HTTP鏈接器的最大請求處理時間的數據:
http://localhost:8080/manager/jmxproxy/?get=Catalina:type=GlobalRequestProcessor,name="http-nio-8080"&att=maxTime
複製代碼
這將產生如下結果:
OK - Attribute get 'Catalina:type=GlobalRequestProcessor,name="http-nio-8080"' - maxTime = 189`
複製代碼
命令模式使用起來比較複雜而且不直觀,同時不能比較多個指標或查看數據隨時間的變化狀況。爲了更深刻地瞭解Tomcat的運行情況和性能,咱們須要使用其餘工具,如JConsole。
在使用JConsole監視Tomcat服務器以前,須要爲JMX啓用遠程鏈接。JConsole可能會消耗大量系統資源,所以Oracle 建議僅經過鏈接到遠程主機,將JConsole與正在監視的服務器隔離。請注意,啓用遠程JMX訪問須要適當的安全預防措施,由於JMX提供有限制的訪問控制。爲了演示的方便,咱們禁用SSL。
首先,在Tomcat的**/ bin目錄中建立一個setenv.sh**文件,幷包含如下內容:
export JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote" export
JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote.port=<PORT>" export
JAVA_OPTS="${JAVA_OPTS} -Djava.rmi.server.hostname=<TOMCAT_HOST_OR_IP>" export
JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote.ssl=false" export
JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote.authenticate=true" export
JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote.access.file=${CATALINA_BASE}/conf/jmxremote.access export JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote.password.file=${CATALINA_BASE}/conf/jmxremote.password
複製代碼
這將設置JConsole可用於遠程鏈接到Tomcat服務器的主機名和端口。您能夠指定任何主機名和未使用的端口。雖然此示例不包含SSL,但它確實啓用了密碼驗證,並指定了在何處查找訪問(用戶名)和密碼文件; 若是它們尚不存在,您可能須要建立它們。您能夠經過編輯**$ {CATALINA_BASE} /conf/jmxremote.access**文件來添加新用戶併爲他們提供兩種權限之一( readonly
和 readwrite
):
tomcatUserRead readonly
tomcatUserWrite readwrite
複製代碼
第一行授予 tomcatUserRead
用戶 readonly
權限,這意味着該用戶能夠查看MBean屬性並接收通知。
第二行 tomcatUserWrite
用戶提供了 readwrite
權限,容許該用戶添加和刪除MBean,設置屬性和運行操做。
接下來,在**$ {CATALINA_BASE} /conf/jmxremote.password**文件中爲這些用戶設置密碼:
tomcatRead <PASSWORD> tomcatWrite <PASSWORD>
複製代碼
保存文件並從新啓動Tomcat服務器。接下來,打開JConsole並運行如下命令,確保包含您在setenv.sh文件中定義的主機和端口:
jconsole <TOMCAT_HOST_OR_IP>:<PORT>
複製代碼
這將打開JConsole界面,您能夠在其中開始查看與JVM和Tomcat服務器相關的數據。
JConsole是JDK附帶的圖形界面。JConsole提供了一種更直觀的方式來監視關鍵JVM指標,如堆內存使用狀況,線程使用狀況和CPU使用狀況。而不是經過有限的接口(如JMX代理)查詢數據,您可使用JConsole快速查看多個指標的數據,並深刻查看Tomcat的Catalina和JVM的java.lang域的特定MBean類型和屬性。您能夠導航到六個不一樣的選項卡:概覽,內存,線程,類,VM摘要和MBean。每一個選項卡都提供一個下拉菜單,使您能夠查看做用於不一樣時間範圍的數據,例如最近五分鐘,過去一個月或從服務器開始(在下拉列表中顯示爲「所有」選項)。
JConsole的Overview選項卡顯示了與JVM的內存使用狀況,線程數,應用程序加載的Java類以及CPU使用率相關的信息,所以您能夠一目瞭然地監視虛擬機的運行情況。
在「VM摘要」選項卡中,您能夠查看有關JVM體系結構及其特徵的更多詳細信息。若是您須要快速查看系統級屬性或JVM配置設置,這將很是有用。這包括您在Tomcat的**/bin/setenv.sh**配置文件中指定的任何參數。
在「內存」選項卡下,您能夠查看有關虛擬機堆和非堆內存使用狀況的更詳細統計信息,以及有關內存池的數據。在此選項卡中,您能夠單擊「執行GC」以運行垃圾回收,就像在Tomcat管理器中同樣。
若是須要查看與特定內存池相關的數據,能夠從「內存」選項卡左上角的「圖表」下拉列表中選擇該數據。
JConsole的「線程」選項卡提供有關可用JVM線程的更多詳細信息以及對死鎖線程的檢查。「線程」列表顯示線程名稱,狀態(相似於您在Tomcat的服務器狀態頁面上看到的線程「階段」),以及每一個可用線程的堆棧跟蹤。死鎖檢查對於查找可能致使應用程序掛起的線程很是有用。若是找到任何死鎖線程,您將看到一個新的死鎖選項卡,其中包含有關致使死鎖的更多信息。
要查看與您正在監視的Tomcat指標相關的實時數據,您能夠在MBeans選項卡下查看Catalina和java.lang域,並深刻查看特定屬性。與Tomcat Manager同樣,JConsole從MBean服務器收集數據,但提供了一個更簡單的界面來查找所需的指標。
JConsole提供了JVM和MBean數據的完美摘要,它使您可以繪製JVM數據圖形,以可視化資源使用趨勢。
默認狀況下,Tomcat訪問日誌使用公共日誌格式 ,並記錄服務器處理的全部請求。您能夠在Tomcat的conf / server.xml配置文件中查看訪問日誌中包含的內容:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />`
複製代碼
Valve
元素的 pattern
屬性指定應包含在每一個日誌條目中的每一個請求(及其響應)的信息:
發出請求的客戶端的主機名或IP地址( %h
)
來自identd服務的用戶名(老是返回' - ')( %l
)
通過身份驗證的用戶名(返回 -
若是未使用)( %u
)
請求的日期和時間( %t
)
請求方法和URI( %r
)
響應的HTTP狀態代碼( %s
)
返回給客戶端的對象大小,以字節爲單位( %b
)
上面示例中使用的模式將按如下格式記錄請求:
192.168.33.1 - - [21/Sep/2018:16:51:59 +0000] "GET /sample/ HTTP/1.1" 403 1145
複製代碼
Tomcat默認也會生成服務器日誌,並使用java.util.logging 包來實現 。服務器日誌顯示與Tomcat JVM和Catalina服務器相關的信息,包括內存不足(OOM)錯誤和部署活動,以下例所示:
16-Oct-2018 18:37:08.624 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina] 16-Oct-2018 18:37:08.625 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/9.0.10 16-Oct-2018 18:37:08.629 SEVERE [main] org.apache.catalina.startup.HostConfig.beforeStart Unable to create directory for deployment: [/opt/tomcat/conf/Catalina/localhost] 16-Oct-2018 18:37:08.672 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/opt/tomcat/webapps/sample.war] 16-Oct-2018 18:37:09.341 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/opt/tomcat/webapps/sample.war] has finished in [667] ms
複製代碼
Tomcat將服務器日誌寫入控制檯和Catalina日誌文件(例如, catalina.2018-07-03.log)。您能夠自定義Tomcat應記錄的信息類型,例如Tomcat日誌記錄屬性文件( conf / logging.properties )中的最小日誌級別,輸出目錄和輸出格式。
處理程序是處理傳入日誌消息並格式化其輸出的Java組件,使用格式化程序記錄到文件( FileHandler
)或控制檯( ConsoleHandler
)。Tomcat的日誌記錄屬性文件包括Catalina服務器,Tomcat Manager和已部署的Web應用程序日誌的配置:
############################################################
# Handler specific properties. # Describes specific configuration info for Handlers.
############################################################
1catalina.org.apache.juli.FileHandler.level = FINE 1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 1catalina.org.apache.juli.FileHandler.prefix = catalina.
2localhost.org.apache.juli.FileHandler.level = FINE 2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 2localhost.org.apache.juli.FileHandler.prefix = localhost.
3manager.org.apache.juli.FileHandler.level = FINE 3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 3manager.org.apache.juli.FileHandler.prefix = manager.
3manager.org.apache.juli.FileHandler.bufferSize = 16384 java.util.logging.ConsoleHandler.level = FINE java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
############################################################
# Facility specific properties. # Provides extra control for each logger.
############################################################
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = \
2localhost.org.apache.juli.FileHandler org.apache.catalina.core.ContainerBase.[Catalina].[localhost].
[/manager].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = \ 3manager.org.apache.juli.FileHandler
複製代碼
默認狀況下,Tomcat爲其處理程序( FINE
)和工具( INFO
)設置兩個不一樣的日誌級別。FINE
日誌級別包括有關服務器活動的詳細信息, INFO
級別記錄更高級別的信息性消息。處理程序屬性總體管理Tomcat日誌,而工具屬性使您能夠管理每一個已部署應用程序的配置,包括Tomcat Manager。例如,要調整Tomcat Manager的日誌級別,能夠編輯如下處理程序和工具屬性:
1. `3manager.org.apache.juli.FileHandler.level = FINE 3manager.org.apache.juli.FileHandler.directory = ${catalina.
複製代碼
經過設置一些簡單權限,您能夠當即開始使用Tomcat Manager查看Tomcat和JVM數據。一旦爲JMX啓用了遠程鏈接,就可使用JConsole等工具經過簡單的圖形界面監控Tomcat數據。Tomcat還在其訪問和服務器日誌中提供有關請求和服務器活動的基本診斷信息。
你的贊和關注是我繼續創做的動力~