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



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

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


当我如下填写对话框时:


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


我收到以下错误:


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


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


我需要怎么做才能使用正确的JMX信息进行配置?
我需要怎么做才能为jstatd正确配置它?

最佳答案

这不是指定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进行只读处理!即chmod 400 jmxremote.password

monitorRole  readpass
controlRole  changepass


基本上,您将设置2个JMX用户ID。可以访问暴露的吸气剂的一种。另一个也可以使用setter和mbean的方法。在实践中,通常需要提供后者,因此您不仅可以外观。

所以....
在上方的对话框中,它变为


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

10-07 16:16
查看更多