新聞中心
做為工程師,有些時候,總會遇到部署的 Web 應用沒有響應,或者狀態(tài)不對等各類問題。 對于部署在 Tomcat 之上的 Java Web 應用,一般我們都會像程咬金一樣,先使出「三板斧」來分析問題。

公司主營業(yè)務:做網(wǎng)站、網(wǎng)站建設、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出石柱土家族免費做網(wǎng)站回饋大家。
- 請求一下
- 查下進程在不在
- jstack 打下線程棧分析
我們在查看進程是否存在時,并沒有直接查看對應 Web 應用的方式, 一般都是查看 Tomcat 的對應 Java 進程是否在。 如果應用沒有響應另外再觀察線程棧。
那這里有一個問題,Tomcat 進程在的時候,我們怎么來看 Tomcat的狀態(tài)呢?
畢竟做為一個Java 應用,只要一啟動的時候就會創(chuàng)建進程。這個并不能做為 Tomcat 在工作的真實依據(jù)。 此時有什么辦法來判斷當前 Tomcat 的工作狀態(tài)呢?
一般在做集群內(nèi)容器的心跳狀態(tài)檢測時也會遇到同樣的問題。
這種情況如果 Tomcat 部署了ROOT應用,可以通過訪問其指定的頁面來判斷請求是否可達,來確認 Tomcat 的狀態(tài)。
另外一種方式是通過連接 Tomcat 的 MBeanServer 來確認其狀態(tài)。一般情況Tomcat 宕掉了 MBeanServer也會連接失敗。
前面的文章我們介紹過 JMX 連接到 Tomcat 提供的 MBeanServer 上(你了解JMX在Tomcat的應用嗎?),可以執(zhí)行一系列的容器相關組件的操作,甚至像啟動停止 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 ,這里正是連接到這個端口對應的ServerSocket上,如果可以正常連接,表示 Tomcat 處于運行狀態(tài)。 連接不上Socket 自然是 Tomcat 不可用了。
該端口除了獲取狀態(tài)外,還可以干啥呢? 還可以停止 Tomcat 進程,畢竟該端口可是號稱SHUTDOWN端口啊。
實現(xiàn)起來也比較簡單,在 Tomcat 的 SHUTDOWN端口旁邊,還有一個屬性,做為一個token,用于識別來關閉 Tomcat 的命令。當 Server 接收到帶有這個token 的命令時,退出實例。
完整的實現(xiàn),需要根據(jù)指定的 Tomcat 安裝目錄,解析配置文件,獲取 SHUTDOWN 端口,以及對應的token,連接對應的 ServerSocket,獲取狀態(tài),執(zhí)行命令。
【本文為專欄作者“侯樹成”的原創(chuàng)稿件,轉載請通過作者微信公眾號『Tomcat那些事兒』獲取授權】
戳這里,看該作者更多好文
文章名稱:如何檢測Tomcat的狀態(tài)是UP還是DOWN?
文章出自:http://m.fisionsoft.com.cn/article/ccdpeeh.html


咨詢
建站咨詢
