您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何檢測Tomcat的狀態(tài)是UP還是DOWN,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
做為工程師,有些時候,總會遇到部署的 Web 應(yīng)用沒有響應(yīng),或者狀態(tài)不對等各類問題。
我們在查看進程是否存在時,并沒有直接查看對應(yīng) Web 應(yīng)用的方式, 一般都是查看 Tomcat 的對應(yīng) Java 進程是否在。 如果應(yīng)用沒有響應(yīng)另外再觀察線程棧。
那這里有一個問題,Tomcat 進程在的時候,我們怎么來看 Tomcat的狀態(tài)呢?
畢竟做為一個Java 應(yīng)用,只要一啟動的時候就會創(chuàng)建進程。這個并不能做為 Tomcat 在工作的真實依據(jù)。 此時有什么辦法來判斷當前 Tomcat 的工作狀態(tài)呢?
一般在做集群內(nèi)容器的心跳狀態(tài)檢測時也會遇到同樣的問題。
這種情況如果 Tomcat 部署了ROOT應(yīng)用,可以通過訪問其指定的頁面來判斷請求是否可達,來確認 Tomcat 的狀態(tài)。
另外一種方式是通過連接 Tomcat 的 MBeanServer 來確認其狀態(tài)。一般情況Tomcat 宕掉了 MBeanServer也會連接失敗。
前面的文章我們介紹過 JMX 連接到 Tomcat 提供的 MBeanServer 上(你了解JMX在Tomcat的應(yīng)用嗎?),可以執(zhí)行一系列的容器相關(guān)組件的操作,甚至像啟動停止 Connector 這些看似「危險」的操作。
當然要通過 JMX URL 連接到 Tomcat MBeanServer 上,是需要在啟動腳本中配置參數(shù)啟用。 除此之外,也可以用類似 JConsole 連接到各個 JVM 進程的方式,是通過 attach 到 VirtualMachine 后獲取連接的。這個方式我們后面再寫文章單獨說。
在在官方的FQA里,還提到了一種實現(xiàn)檢測狀態(tài)的方式。
熟悉 Tomcat 配置的朋友都知道, 在一臺機器上部署多個 Tomcat 時,經(jīng)常會有端口沖突的問題, 這是因為在 server.xml 里會配置多個端口供實例使用。 除了 Connector 監(jiān)聽的端口外,還有一個 Server 組件使用的端口,默認是8005。 多個實例之間,除 Connector 端口外,這個SHUTDOWN 端口也是沖突的。
這里要實現(xiàn)檢測 Tomcat 狀態(tài)就是通過連接這個「端口」來實現(xiàn)。
說到端口,大家第一印象一定是 Socket ,這里正是連接到這個端口對應(yīng)的ServerSocket上,如果可以正常連接,表示 Tomcat 處于運行狀態(tài)。 連接不上Socket 自然是 Tomcat 不可用了。
該端口除了獲取狀態(tài)外,還可以干啥呢? 還可以停止 Tomcat 進程,畢竟該端口可是號稱SHUTDOWN端口啊。
實現(xiàn)起來也比較簡單,在 Tomcat 的 SHUTDOWN端口旁邊,還有一個屬性,做為一個token,用于識別來關(guān)閉 Tomcat 的命令。當 Server 接收到帶有這個token 的命令時,退出實例。
完整的實現(xiàn),需要根據(jù)指定的 Tomcat 安裝目錄,解析配置文件,獲取 SHUTDOWN 端口,以及對應(yīng)的token,連接對應(yīng)的 ServerSocket,獲取狀態(tài),執(zhí)行命令。
關(guān)于如何檢測Tomcat的狀態(tài)是UP還是DOWN就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。