2012-09-07 42 views
5

對不起,如果這是前面提到的問題的重複,但我已經嘗試過在這裏和其他地方提供的解決方案,它們都不適合我。使用VisualVM和SSH遠程監視Tomcat 7服務器

場景:我需要分析生活在防火牆後面的生產Tomcat 7服務器。我只有SSH訪問這臺服務器。選擇的分析工具是Visualvm,並且這些服務器沒有安裝GUI。我試圖從運行Ubuntu 10.04服務器LTS連接的服務器和機器。

可能的解決辦法:使用VisualVM的通過SSH隧道似乎是可能的,下面給出的鏈接提供了非常詳細的指南,這樣做:

Tomcat+VisualVM+SSH guide

而且我加了jmxremote.access文件給Tomcat中的/ CONF DIR與以下兩行:

monitorRole readonly 
controlRole readwrite 

問題:我跟着步驟在文章中提供的一切似乎都很好。我可以使用jmxterm和指南中給出的連接字符串在本地(從服務器)連接到服務器中的jmx端口。

根據本指南配置本地tomcat作爲測試,Visualvm使用連接字符串連接到此tomcat實例沒有問題。

但是,VisualVM不會通過SSH隧道連接到遠程服務器。我試圖JConsole的,因爲它更簡單,具有更好的日誌記錄工具,我得到消息的順序如下:

FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi://localhost:12009/jndi/rmi://localhost:12008/jmxrmi] connecting... 
FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi://localhost:12009/jndi/rmi://localhost:12008/jmxrmi] finding stub... 
FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi://localhost:12009/jndi/rmi://localhost:12008/jmxrmi] connecting stub... 
FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi://localhost:12009/jndi/rmi://localhost:12008/jmxrmi] getting connection... 
FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi://localhost:12009/jndi/rmi://localhost:12008/jmxrmi] failed to connect: java.rmi.NoSuchObjectException: no such object in table 

任何想法,我做了什麼錯在這裏?任何幫助是極大的讚賞!

謝謝。

回答

2

我認爲你所遇到的問題,引用的文章沒有真正解決,是jmx-rmi,或者更確切地說,RMI本身的工作方式。 Tomcat服務器的設置是這樣的:

  1. 創建的配置連接到本地主機的RMI遠程的:12009
  2. 在本地主機上創建RMI註冊表,其監聽端口爲localhost:12008

當你在本地運行,您可以查找在RMI註冊存根,當你調用對存根發出JMX調用,它連接到本地主機:12009,沒問題。

當您通過SSH遠程運行,我假設你已經從遠程到Tomcat服務器隧道端口12008,所以當你發佈你的要求,你的遠程的localhost:12008因爲日誌輸出似乎是隧道到tomcatServer:12008表明你找到了存根。

接下來,您的遠程執行對存根,然後依次嘗試連接到localhost:12009並失敗。

我的猜測是,你需要隧道遠程的本地主機:12008 本地主機:12009重定向到tomcatServer:12008 tomcatServer:12009。

解決此獲得的另一種方式是溝RMI JMX協議和使用類似Jolokia(HTTP),JMX-WS(HTTP web服務)或JMXMP(插座)。這會讓你的SSH調整生活變得更容易。如果你想嘗試JMXMP,我創建了一個名爲OpenDMK的github項目,該項目具有maven化構建。你會想要jmx-optional包。

+0

尼古拉斯,謝謝你的回答。我有localhost:12008和localhost:12009隧道到tomcat服務器上的相應端口。它只是不工作。我把你的建議嘗試JMXMP,它的工作非常出色。謝謝。 – ChamaraG

0

感謝您的問題! - 我有相同的基本需求。對不起,我實際上並沒有在這裏添加任何新東西,但我想我會提到你提供的參考: https://www.liferay.com/web/thiago.moreira/blog/-/blogs/how-to-monitor-liferay-tomcat-remotely-through-firewalls-using-visualvm 剛剛爲我工作(只有很小的調整隻與更新的版本有關 - Tomcat 7和VisualVM 1.3.8)。在我的情況下,Tomcat運行在CentOS 6.6上,而監控機器是Mac(可能這可以幫助其他人)。再次感謝。