Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用VisualVM和JMX?_Java_Rmi_Jmx_Visualvm_Jvisualvm - Fatal编程技术网

Java 如何使用VisualVM和JMX?

Java 如何使用VisualVM和JMX?,java,rmi,jmx,visualvm,jvisualvm,Java,Rmi,Jmx,Visualvm,Jvisualvm,我试过书中的每一个菜谱,但今天不行了 我正试图使用VisualVM来评测我在远程服务器上运行的Java应用程序,所以我搜索了又搜索,搜索了又搜索,寻找实现这一点的方法,最终得到了以下解决方案: java -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=9199 \ -Dcom.sun.management.jmxremote.local.only=false \ -Dcom.sun.manage

我试过书中的每一个菜谱,但今天不行了

我正试图使用VisualVM来评测我在远程服务器上运行的Java应用程序,所以我搜索了又搜索,搜索了又搜索,寻找实现这一点的方法,最终得到了以下解决方案:

java -Dcom.sun.management.jmxremote \
  -Dcom.sun.management.jmxremote.port=9199 \
  -Dcom.sun.management.jmxremote.local.only=false \
  -Dcom.sun.management.jmxremote.authenticate=false \
  -Dcom.sun.management.jmxremote.ssl=false \
  -jar bin/felix.jar
运行这个会让我运行JMX,我想,这样我就可以看到他在9199上运行:

java      21947        root    9u  IPv6 1811434      0t0  TCP *:7192 (LISTEN)
java      26376        root   14u  IPv6 1844518      0t0  TCP *:9199 (LISTEN)
此外,我可以测试端口在web上是否可见:

现在,当我尝试在我的机器中的VisualVM中打开连接(它也可以ping jmx服务器)时,会发生以下情况:

我一定是太傻了,除了我,这个世界上的每个人都能让这东西运转。该死的

编辑:我安装wireshark是为了知道引擎盖下发生了什么,所以我看到了这个。一旦我在VisualVM中添加远程IP,wireshark就会开始检测到这种重复活动:

然而,如果我尝试添加一个新的JMX连接并要求他连接,wireshark甚至不会获取该连接尝试的一个数据包


在我看来,VisualVM甚至没有尝试连接,尽管给出了错误消息“无法连接”。。。!!到底是怎么回事?

请使用以下JVM选项:

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=<PORT> -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=<IP>
-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false-Djava.rmi.server.hostname=
在VisualVM中,使用以下连接:

service:jmx:rmi:///jndi/rmi:/<IP>:<PORT>/jmxrmi
服务:jmx:rmi:///jndi/rmi:/:/jmxrmi

希望这会有所帮助。

遵循以下步骤。
1) 转到远程计算机打开X11转发,
2) 已在windows中安装XMING
3) 在远程计算机中启动visual VM GUI将出现在您的windows xming中。
4) 使用本地主机和相同的端口号代替IP

如果上述步骤不起作用,则表示配置有问题。
如果上述步骤工作正常,则转到iptables并确保端口9199对外部世界开放。 也可以使用
java-Djava.rmi.server.hostname=YOUR_IP启动程序


有关更多详细信息,请参阅此

使用以下选项启动您的服务:

-Djava.rmi.server.hostname=193.163.XXX.XXX
-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=9199 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false

然后,您可以使用jvisualvm或jconsole,仅使用“193.163.XXX.XXX:9199”地址

也许这可以解决问题-确保主机IP配置正确我以前试过:(尽管端口在web上可见,但似乎什么都不起作用。出于好奇,您的桌面和启用JMX的进程之间是否有防火墙?我知道您说端口9199是开放的;但是,JMX需要第二个随机分配且不可配置的端口。当试图通过防火墙使用JMX时,这会导致巨大的问题。可能不是你的问题,只是把它作为一个东西放在那里看看:我不知道有任何防火墙存在。负责网络的系统管理员说,两者之间没有防火墙。JMX必须是DCOM技术的近亲。他们怎么能把这么简单的事情变成设计过度、无法工作的解决方案。。。该死…谢谢你的建议。它不起作用,给出了完全相同的错误消息。9199端口仍然可以在全球范围内访问。你是否使用了我提供的java选项。它与你的略有不同:-Djava.rmi.server.hostname=Yes.java-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=9199-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false-Djava.rmi.server.hostname=193.136.102.224-jar-bin/felix.jarAnd在VisualVM:service:jmx:rmi:///jndi/rmi:/193.136.102.224:9199/jmxrmiSorry 我无法帮助您。请尝试hawtio:。简而言之,它通过HTTP公开JMX。我曾经监视tomcat.As根据文档,您需要执行以下操作:java-jar-hawtio-app-1.4.50.jar——端口8090