我还需要在服务器上配置jconsole

时间:2013-05-06 12:00:28

标签: java configuration jmx jconsole

我想在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

2 个答案:

答案 0 :(得分:2)

我有一个解决方案:

另见:https://stackoverflow.com/a/17457394/1531271

如果 Java进程在防火墙后的Linux上运行,并且您希望在本地计算机上的Windows上启动Jconsole。

注意:如果你没有putty.exe(如果你是linux oder mac os用户),你也可以使用ssh命令添加隧道;


1。您需要从这里获得Windows机器的putty-suite:

  

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

     

至少 putty.exe


2。首先检查linux机器上的ip地址

hostname -i

result ---> <your-linux-ip-adress>

实施例

your-linux-ip-adress = 10.20.30.40


3。在linux机器上定义两个免费端口:

<jmx-remote-port>
<jndi-remote-port>

实施例

jmx-remote-port = 15666      
jndi-remote-port = 15667


4。在linux机器上为java进程添加参数

-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


5。使用putty

从Windows计算机启用两个SSH隧道
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


6。使用此SSH-Tunnel登录到您的Linux计算机。

当您登录时,Putty会将所有TCP连接隧道传输到

localhost:15666 and localhost:15667

10.20.30.40:15666 and 10.20.30.40:15667


7。启动JConsole并使用以下URL连接到Java Process

[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


8。享受:)

答案 1 :(得分:0)

好的,实际上,默认情况下会启用以下选项:

  • com.sun.management.jmxremote.authenticate
  • com.sun.management.jmxremote.ssl

正如here所述,如果启用了SSL,则需要在正确配置SSL的情况下运行JConsole。 我认为您应该尝试通过在启动应用程序的脚本中添加此选项来禁用SSL:com.sun.management.jmxremote.ssl=false