【问题标题】:Adding remote VMs in Java VisualVM在 Java VisualVM 中添加远程 VM
【发布时间】:2015-01-14 19:10:23
【问题描述】:

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

假设我有一个在 myapp01.example.org:8443 上运行的 Java 应用程序(WAR 部署到 Tomcat)。要通过 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

【问题讨论】:

  • 您需要使用您想用来访问它的用户名/密码创建 managa-jmx 用户。 tomcat.apache.org/tomcat-7.0-doc/manager-howto.html
  • 谢谢@Nambari (+1) - 但是请参阅JMX section on that page - 没有提到用户名/密码配置?您确定这不是从早期版本的 Tomcat 中弃用/删除的东西吗?再次感谢!
  • 搜索“manager-jmx”部分。在那里您将看到如何为 manager-* 角色创建用户。

标签: java tomcat jmx visualvm jstatd


【解决方案1】:

这不是 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 的 ID,否则 JMX 将不起作用!即 chmod 400 jmxremote.password

monitorRole  readpass
controlRole  changepass

基本上,您要设置 2 个 JMX 用户 ID。一种可以访问暴露的吸气剂的方法。另一个也可以访问 setter 和任意 mbean 方法。在实践中,您通常会希望提供后者,这样您就可以做更多的事情,而不仅仅是看。

所以.... 在上面的对话框中,它变成了

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

【讨论】:

  • 太棒了,谢谢@Terry (+1)!几个后续问题。 (1)如果我定义bin/setenv.sh,是不是每次Tomcat都启动这些选项?这是不可取的;仅当我需要在调试模式下启动它并排除故障时。有没有办法在另一个文件中定义它,然后用另一个文件启动 Tomcat? (2) 我在哪里放置jmxremote.accessjmxremote.password 文件?再次感谢!
  • 1.不,它并不总是以调试模式启动。这只是告诉它将在哪个端口调试上运行。要实际附加 Eclipse 而不是“bin/startup.sh”进行远程调试,您可以使用命令“bin/startup.sh jpda start”启动tomcat
  • 从技术上讲,jmxremote 文件必须位于 JVM 的类路径中(如果我没记错的话)。但最常见的是将它们放在 tomcat/conf 目录中(与 context.xml 相同的位置)注意 setenv.sh 中的相对路径规范
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多