在Java VisualVM中添加远程VM

时间:2015-01-14 19:10:23

标签: java tomcat jmx visualvm jstatd

如果我打开jvisualvm并转到File >> Add Remote Host,系统会提示我创建一个新的远程服务器条目。我输入主机名myapp01.example.org,然后我看到该服务器显示在左侧Remote树的Applications部分下。当我右键单击该服务器并单击Add JMX Connection时,我会看到以下对话框:

enter image description here

假设我在myapp01.example.org:8443上运行了一个Java应用程序(部署到Tomcat的WAR)。要通过SSH连接到服务器,我使用用户名skroob和密码12345(嘿,那是我行李上的组合!):

ssh skroob@myapp01.example.org
skroob@myapp01.example.org's password: 12345

当我按如下方式填写对话框时:

  • 连接:myapp01.example.org:8443
  • 用户名:skroob
  • 密码:12345

我收到以下错误:

  

无法连接到skroob@myapp01.example.org:8443使用服务:jmxLrmi:/// jndi / rmi://myapp01.example.org:8443 / jmxrmi

我相信这可能是因为我没有将JMX配置为在Tomcat上公开。或者我可能只是输入了错误的信息。也许两者。无论哪种方式:

  • 使用正确的JMX信息配置此内容需要做什么?
  • 我需要做些什么才能正确配置jstatd

1 个答案:

答案 0 :(得分:2)

这不是指定JMX连接的方式。对于tomcat,最好的方法是创建bin / setenv.sh文件。这是最好的,因为Apache脚本已经设置为查找它并在存在时调用它。

您可以在此处设置任何特定于安装的参数。

你会做这样的事情:

#
# PORT for debug
export JPDA_ADDRESS='8000'

echo start with 'jpda start' parameters to enable debugging.  Tomcat will listen on $JPDA_ADDRESS

CATALINA_OPTS="\
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=1299 \
-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password \
-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access \
-Dcom.sun.management.jmxremote.ssl=false 

jmxremote.access:

monitorRole readonly
controlRole readwrite

jmxremote.password:这个文件必须是由启动Tomcat或JMX的ID无法工作的READONLY!即chmod 400 jmxremote.password

monitorRole  readpass
controlRole  changepass

基本上您要设置2个JMX用户ID。一个可以访问暴露的getter。另一个也可以访问setter和anyary mbean方法。在实践中,您通常希望提供后者,这样您可以做的不仅仅是看。

<强> SO .... 在上面的对话框中,它变为

  • 连接:myapp01.example.org:1299
  • 用户名:controlRole
  • 密码:changepass