我想在jconsole中使用jmx。这是.sh文件中的相关行
## enable jconsole access
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.password.file=/usr/pkg/tomcat-rusznak/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/usr/pkg/tomcat-rusznak/jmxremote.access -Djava.rmi.server.hostname=ba.accra.com"
这是jmxremote.password文件的内容
monitorRole password
controlRole password
这是jmxremote.access文件的内容
monitorRole readonly
controlRole readwrite \
create javax.management.monitor.*,javax.management.timer.* \
unregister
但是当我提供正确的主机名,端口并尝试使用monitorRole - 密码对登录时,我得到的就是:
Connection failed: connection refused.
为什么?
我检查了很多类似的问题,例如我从stackoverflow知道我需要包含主机名(-Djava.rmi.server.hostname = ba.accra.com),但它没有解决问题,事情显然是在误导。我还需要什么?
EDITED
我不知道它是否相关但我想补充一点,我没有问题在本地启动jconsole (虽然连接总是被拒绝)但我甚至无法启动它服务器!
jconsole: not found
答案 0 :(得分:2)
我有一个解决方案:
另见:https://stackoverflow.com/a/17457394/1531271
如果 Java进程在防火墙后的Linux上运行,并且您希望在本地计算机上的Windows上启动Jconsole。
注意:如果你没有putty.exe(如果你是linux oder mac os用户),你也可以使用ssh命令添加隧道;
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
至少 putty.exe
hostname -i
result ---> <your-linux-ip-adress>
your-linux-ip-adress = 10.20.30.40
<jmx-remote-port>
<jndi-remote-port>
jmx-remote-port = 15666
jndi-remote-port = 15667
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=<jmx-remote-port>
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=<your-linux-ip-adress>
-Djava.rmi.activation.port=<jndi-remote-port>
java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=15666 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=10.20.30.40 -Djava.rmi.activation.port=15667 ch.sushicutta.jmxremote.Main
Source port: <jmx-remote-port>
Destination: <your-linux-ip-adress>:<jmx-remote-port>
[x] Local
[x] Auto
Source port: <jndi-remote-port>
Destination: <your-linux-ip-adress>:<jndi-remote-port>
[x] Local
[x] Auto
Source port: 15666
Destination: 10.20.30.40:15666
[x] Local
[x] Auto
Source port: 15667
Destination: 10.20.30.40:15667
[x] Local
[x] Auto
当您登录时,Putty会将所有TCP连接隧道传输到
localhost:15666 and localhost:15667
到
10.20.30.40:15666 and 10.20.30.40:15667
[x] Remote Process:
service:jmx:rmi://localhost:**<jndi-remote-port>**/jndi/rmi://localhost:<jmx-remote-port>/jmxrmi
[x] Remote Process:
service:jmx:rmi://localhost:15667/jndi/rmi://localhost:15666/jmxrmi
答案 1 :(得分:0)
好的,实际上,默认情况下会启用以下选项:
com.sun.management.jmxremote.authenticate
com.sun.management.jmxremote.ssl
正如here所述,如果启用了SSL,则需要在正确配置SSL的情况下运行JConsole。
我认为您应该尝试通过在启动应用程序的脚本中添加此选项来禁用SSL:com.sun.management.jmxremote.ssl=false