當前位置:
首頁 > 最新 > 一款功能強大的Tomcat 管理監控工具

一款功能強大的Tomcat 管理監控工具

啟動 Tomcat完畢 ,有些時候總會打開瀏覽器 http://localhost:8080/

去驗證你的Tomcat是否啟動成功,看到ROOT應用里那個黃黃的三條腿的貓,你就放心了:服務啟動沒問題。如果請求不成功,那一定是哪裡出了問題,啟動異常才導致這個默認自帶的app沒有啟動成功。從而進一步看log分析。

除了ROOT應用外,Tomcat還默認提供了 Manager這個應用。

之前的文章里我們曾分析過 Manager 應用的實現細節

在功能上 Manager 可以

1. 部署

管理已部署的應用(啟、停應用,重部署)

部署war

通過context.xml形式部署

設置Session過期

2. 診斷內存泄露等

3. 顯示 JVM 內存信息

4. Connector 線程的狀態

還有什麼呢?

我們看到, Tomcat 的這個Manager提供的,是比較常用,但很有限的幾個基礎功能。

使用過 比如 Weblogic, WebSphere, 開源的 GlassFish 等J2EE 應用伺服器的朋友會發現,與Tomcat 的Manager 相比, 他們都提供了一個功能更完備的所謂的「管理控制台」。

這個管理控制台,可以做的事情,比上面 Manager 提供的就豐富多了。比如最常用的一個: 8080 這個埠不夠用,我們想再加一個埠響應其他的請求,或者在配置ajp請求處理時,我們想加一個 Connector ,這個時候在 J2EE的管理控制台里,直接操作添加即可,一步步來。

甚至應用部署的時候,可以選擇JSP的預編譯(JSP預編譯,加速你的應用),創建數據源等等。

在 Tomcat 里對於創建 Connector 這個操作,你需要怎麼做?

打開server.xml, 把 8080這個配置拷一份,改改埠,改改BIO/NIO的處理,重啟Tomcat。(敲黑板,這裡是考點哦),而管理控制台一類的處理時不需要重啟實例的。實質上Connector 做為一個組件與 Container 是不互相影響的,其實 Tomcat 也能做到不需要重啟,只是這個創建 Connector 的過程,需要我們以編程的方式,來對配置文件的內容進行Marshaller/Unmarshaller。直接操作Container的內容,也可以通過JMX 來實現。

你說你部署了一個應用,該應用里配置了哪些Servlet、哪些Listener? Web.xml里有沒有init-param,去哪能看看么?

不好意思,需要自己打開應用配置來看。

管理控制台的思路,一般會將當前應用具體的配置信息列出來,方便管理。

當然,區別還有很多...

其實,在Tomcat 6之前,也是有這樣一款名為「Tomcat Admin」的應用,功能可以媲美應用伺服器的管理控制台,不過後來不再提供了。可惜呀。

當然說了這麼多,我們並不是開始嫌棄 Tomcat了。畢竟做為一個純的Web Container,而且是非商業產品,也算不錯了。

為了能使用一個較好用,功能也較全面的 Tomcat 管理工具,官方不提供我們只能把目光投向巨大的第三方開源之海,埋頭苦找么?

官方的wiki里也我們指了條路:

PSI Probeisadvanced managerandmonitorweb application for Apache Tomcat.

這是一款 Tomcat 管理和監控工具,前身是 Lambda Probe。由於 Lambda Probe 2006不再更新,所以 PSI Probe 算是對其的一個 Fork 版本並一直更新至今。

使用也很方便,在github(https://github.com/psi-probe/psi-probe) 下載對應的war文件,部署即可。

訪問的時候,和 Manager 一樣,也是需要使用配置在tomcat-users.xml中的用戶來訪問。

登錄後是這個樣子:

通過上面一長串的tab,就能感受到功能上要比 Manager應用要強大吧。甚至部分功能能追平「管理控制台」的體驗了。

來看應用部署這一塊

除了部署這個功能外,還包含一般J2EE的應用伺服器包含的功能「JSP預編譯」來加速應用的響應。還有清空work的選項。

直接頁面看日誌

對於日誌文件,可以實時修改不同的日誌級別,來列印日誌。

可以將當前配置的 Connector列出來,各個 Connector 收到的請求等

更多的功能,下載下來探索吧! Have fun!

PSI背後是如何實現的功能呢?

我們之前的文章寫過,在 Tomcat 內存在一種「特權應用」(啥,Tomcat里竟然還有特權應用?)

是可以直接訪問Tomcat的一些內部組件的,PSI就是把自己設置成一個特權應用,同時對於Tomcat內的操作, PSI是通過 Wrapper的形式,對不同版本的Tomcat 創建了一個Adapter

這裡的 Wrapper,就是我們熟悉的Tomcat組件的那個Wrapper,PSI繼承了 Spring 的DispatherServlet,通過Servlet這個Wrapper之後,再拿到其上層組件 Context、Host、Engine。

/**

* Main dispatcher servlet. Spring default dispatcher servlet had to be superseded to handle

* "privileged" application context features. The actual requirement is to capture passed Wrapper

* instance into ContainerWrapperBean. Wrapper instance is our gateway to Tomcat.

*/

@WebServlet

public classProbeServletextendsDispatcherServletimplementsContainerServlet {

在Spring 的Initializer里將Servlet註冊上去

// Set probe servlet

ServletRegistration.Dynamic probe = servletContext.addServlet("probe", ProbeServlet.class);

所以拿到了這些組件,在操作應用的部署,獲取Connector等內容時,其實就和 Tomcat 自己一樣了。

所以如果要開發管理工具,這也是一種實現思路。

一種通過JMX 的MBean,(你了解JMX在Tomcat的應用嗎?)

一種是通過PSI這種思路。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Tomcat那些事兒 的精彩文章:

TAG:Tomcat那些事兒 |