相关疑难解决方法(0)

无法远程连接到JMX?

出于某种奇怪的原因,我无法使用VisualVM或连接jconsole到JMX.

用于启动要监视的VM的参数:

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=1100

我检查过,我可以从本地和远程telnet到这个端口.

尽管如此,在花费了相当多的时间尝试之后,VisualVM或jconsole仍无法连接.

REMOTE MACHINE with JMX (debian)
java version "1.6.0_33"
Java(TM) SE Runtime Environment (build 1.6.0_33-b03-424-11M3720)
Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03-424, mixed mode)

MY WORKSTATION (OS X)
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
Run Code Online (Sandbox Code Playgroud)

问题是什么?

java jmx

52
推荐指数
7
解决办法
7万
查看次数

为何在配置JMX时Java打开3个端口?

我在Centos6上使用JDK7运行我的Java程序.我使用以下选项启用JMX:

JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9123 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=true"
Run Code Online (Sandbox Code Playgroud)

当我检查打开哪些端口时,我发现了2个额外的随机端口:

netstat -plunt | grep java
tcp        0      0 :::9123                     :::*                        LISTEN      13295/java
tcp        0      0 :::59927                    :::*                        LISTEN      13295/java
tcp        0      0 :::59928                    :::*                        LISTEN      13295/java
Run Code Online (Sandbox Code Playgroud)

请注意,每次重启仅配置的端口9123保持不变,另外两个端口会更改值.

netstat -plunt | grep java
tcp        0      0 :::9123                     :::*                        LISTEN      13331/java
tcp        0      0 :::59932                    :::*                        LISTEN      13331/java
tcp        0      0 :::59933                    :::*                        LISTEN      13331/java
Run Code Online (Sandbox Code Playgroud)

什么是2个额外端口以及为什么打开它们?

如何配置2个额外的随机端口?

如何配置::ffff:127.0.0.1将在JMX打开的所有端口之前显示?

为什么在与JConsole连接时不使用一个端口?

添加以澄清答案

不幸的是,附加的随机端口仍然打开为了提醒您,我使用Centos 6.我的Tomcat设置看起来像这样(Tomcat不部署任何应用程序):

CATALINA_OPTS="${CATALINA_OPTS}  -XX:+DisableAttachMechanism -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=true -Djava.rmi.server.useLocalHostname=true -Djava.rmi.server.useCodebaseOnly=true -Dcom.sun.management.jmxremote.port=9123 -Dcom.sun.management.jmxremote.rmi.port=9123" …
Run Code Online (Sandbox Code Playgroud)

java jmx rmi

49
推荐指数
2
解决办法
4万
查看次数

VisualVM over ssh

通过ssh远程阅读Visual VM,但我认为我还没有完全理解,因为它不适合我:-(请有人举个例子吗?

ssh -D 9696 login@ip.of.external.machinevisualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true启动visualvm,但没有显示外部机器的进程(只有像visualvm本身的本地进程).此外,有时(但并非总是)我在ssh窗口中收到消息"通道3:打开失败:连接失败:连接被拒绝".

有帮助吗?

ssh visualvm

48
推荐指数
5
解决办法
4万
查看次数

jmx/jstatd通过ssh隧道访问远程机器

我想使用jmx或jstatd通过ssh隧道(到EC2机器)使用visualvm app.我该怎么做呢?以下是已尝试(和失败)的列表:(顺便说一句:如果视觉vm不合适,如何在远程计算机上找到内存泄漏?)

jstatd:尝试:

我在EC2机器上设置了jstatd服务器(应用程序已在其上运行)然后我设置隧道映射本地端口3333到远程端口1099在VisualVM中我尝试使用端口3333上的jstatd进行连接...没有进程在EC2上出现了

这个链接说jstatd打开另一个端口:http: //rukuro-blog.heroku.com/2011/06/30/monitoring-remote-java-applications-with-visualvm ...所以我从本地主机隧道传输该端口远程.我重新启动了视觉vm ...仍然没有

当我尝试使用folloing命令列出从EC2运行的进程时:

jps -l -m -v rmi://localhost
Run Code Online (Sandbox Code Playgroud)

......我得到了一份流程清单

当我在家用机器上列出它时

jps -l -m -v rmi://localhost:3333
Run Code Online (Sandbox Code Playgroud)

......我没有!那么,rmi端口是不是与jstatd端口(3333)隧道连接......?

jmx尝试:

我使用以下命令在远程计算机上启动了应用程序:

java -Dcom.sun.management.jmxremote.port=3333 \
     -Dcom.sun.management.jmxremote.ssl=false \
     -Dcom.sun.management.jmxremote.authenticate=false\
        -cp :post/* <appName>
Run Code Online (Sandbox Code Playgroud)

...该应用程序工作,所以我隧道本地端口3333到远程3333

然后我尝试从visual vm界面设置一个jmx链接到localhost:3333:...它弹出一个错误说:

cannot connect to localhost:3333 using service:jmx:rmi:///jndi/rmi://localhost:3333/jmxrmi
Run Code Online (Sandbox Code Playgroud)

如果我需要设置删除RMI服务器的链接,我不知道该怎么做.

JMXMP尝试:

这有希望,但有些事情是不对的:

首先,我将jmx_remote jar添加到类路径中,并使用与上面显示的JMX情况相同的命令在远程计算机上启动应用程序.我在oracle下载链接找到了jar

我从本地端口3333到远程端口3333设置了一个ssh隧道.然后我在calsspath中使用相同的jmx_remote文件启动了visualvm.

visualvm -cp:a ~/jmx/jmxremote_optional.jar
Run Code Online (Sandbox Code Playgroud)

然后我尝试将visualvm连接到远程服务器:

service:jmx:jmxmp://localhost:3333
Run Code Online (Sandbox Code Playgroud)

现在,visual vm似乎试图无限连接.它在状态栏中显示"添加服务:jmx:jmxp:// localhost:3333"...并且一直这样做,直到我关闭远程端的应用程序,此时它会弹出一个弹出窗口,说它无法连接与服务器.

使用SOCKS时:

我尝试使用JMX和jstatd失败了.

我不确定SOCKS代理是否正常工作,所以这是我尝试连接的方式:

ssh -i ~/.ssh/starter.pem -v -D 9696 user@host
Run Code Online (Sandbox Code Playgroud)

为了完整起见,我在另一端启动了命令:

    java -Dcom.sun.management.jmxremote\
 -Dcom.sun.management.jmxremote.ssl=false\
 -Dcom.sun.management.jmxremote.authenticate=false\
 -Dcom.sun.management.jmxremote.port=3333 <app>
Run Code Online (Sandbox Code Playgroud)

在本地端,我根据LINK到VisualVm帮助页面设置了 …

java jmx visualvm

14
推荐指数
1
解决办法
1万
查看次数

java rmi -Djava.rmi.server.hostname = localhost仍会打开一个监听0.0.0.0的套接字

我使用-Djava.rmi.server.hostname = localhost选项使rmi仅在localhost上侦听,但netstat显示套接字正在侦听0.0.0.0.

奇怪的是RMI RenewClean线程显示它使用localhost.例如RMI RenewClean- [localhost:59357]

我假设如果我设置-Djava.rmi.server.hostname = localhost它应该只在127.0.0.1上侦听

我误解了java.rmi.server.hostname控制的内容吗?

java rmi

8
推荐指数
1
解决办法
3万
查看次数

如何使用Jconsole连接到EC2?

我在我的macbook上运行Jconsole并尝试连接到没有图形的ec2上的linux终端(只有命令行访问).

我像这样运行我的代码:

java -jar program.jar -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9005 
-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.remote.ssl=false
Run Code Online (Sandbox Code Playgroud)

在这里读到通过EC2访问时出现问题(连接后出现问题)并且解决方案似乎是' java.rmi.server.hostname to the public hostname of the instance'

我对如何做到这一点感到有点困惑.我尝试了两件事,一件是将它直接放在我的代码中(在void static main部分中):

System.setProperty( "java.rmi.server.hostname" , "external_EC2_address" ); //in my real code I have the correct address here
Run Code Online (Sandbox Code Playgroud)

系统接受了它(当我创建/上传runnable jar时没有错误).我还在我的实例上打开防火墙以允许所有TCP流量.没运气.我尝试上述声明也作为启动程序的标志,但仍然没有运气.

有什么想法怎么做?

更新:这将显示我在Java的绿色,我更进一步(仍然无法工作),但我意识到把java -jar filename.jar,然后选项没有给我与放我的相同的结果-jar在命令的末尾.我试过了,程序试图连接,然后说连接失败(之前它只是在登录界面说它).

java rmi jconsole amazon-ec2

6
推荐指数
1
解决办法
4721
查看次数

Spring:无法从防火墙后面使用RMI连接到JMX Server

我的Spring应用程序运行在NAT防火墙(pfSense)后面的机器上.机器的内部IP是a.b.c.d,NAT IP是w.x.y.z

Spring配置的serviceUrl设置为a.b.c.d端口上的内部IP()1100,当我启动应用程序时,我提供以下开关:

 -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=w.x.y.z -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
Run Code Online (Sandbox Code Playgroud)

如上所示,我进行了设置-Djava.rmi.server.hostname=w.x.y.z,以便可以通过NAT连接到应用程序.我还打开了机器防火墙上的相关端口,并设置了一个从w.x.y.z:1100前往的端口a.b.c.d:1100

当我尝试使用jconsole从网络外部连接到应用程序时w.x.y.z:1100,我得到了一个java.io.IOException: jmxrmi

 java.io.IOException: jmxrmi
at sun.tools.jconsole.ProxyClient.checkSslConfig(ProxyClient.java:236)
at sun.tools.jconsole.ProxyClient.<init>(ProxyClient.java:127)
at sun.tools.jconsole.ProxyClient.getProxyClient(ProxyClient.java:483)
at sun.tools.jconsole.JConsole$3.run(JConsole.java:524)
 Caused by: java.rmi.NotBoundException: jmxrmi
at sun.rmi.registry.RegistryImpl.lookup(RegistryImpl.java:136)
at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:409)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267)
at sun.rmi.transport.Transport$1.run(Transport.java:177)
at sun.rmi.transport.Transport$1.run(Transport.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:275)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:252)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:378)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source) …
Run Code Online (Sandbox Code Playgroud)

java spring firewall jmx nat

4
推荐指数
2
解决办法
7327
查看次数

标签 统计

java ×6

jmx ×4

rmi ×3

visualvm ×2

amazon-ec2 ×1

firewall ×1

jconsole ×1

nat ×1

spring ×1

ssh ×1