天天看點

Tomcat 管理監控工具

本文連結:javascript:void(0)

專注于Java領域優質技術号,歡迎關注

原創: 侯樹成 Tomcat那些事兒

Tomcat 管理監控工具

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

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

除了ROOT應用外,Tomcat還預設提供了 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 Probe is advanced manager andmonitor web 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 中的使用者來通路。

登入後是這個樣子:

Tomcat 管理監控工具

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

來看應用部署這一塊

Tomcat 管理監控工具

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

直接頁面看日志

Tomcat 管理監控工具

對于日志檔案,可以實時修改不同的日志級别,來列印日志。

Tomcat 管理監控工具

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

Tomcat 管理監控工具

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

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

我們之前的文章寫過,在 Tomcat 記憶體在一種「特權應用」是可以直接通路Tomcat的一些内部元件的,PSI就是把自己設定成一個特權應用,同時對于Tomcat内的操作, PSI是通過 Wrapper的形式,對不同版本的Tomcat 建立了一個Adapter

Tomcat 管理監控工具

這裡的 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. */@WebServletpublic class ProbeServlet extends DispatcherServlet implements ContainerServlet {

在Spring 的Initializer裡将Servlet注冊上去

// Set probe servletServletRegistration.Dynamic probe = servletContext.addServlet("probe", ProbeServlet.class);

是以拿到了這些元件,在操作應用的部署,擷取Connector等内容時,其實就和 Tomcat 自己一樣了。

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

一種通過JMX 的MBean。

一種是通過PSI這種思路。