我正在使用JMX从远程进程中保存一些诊断信息.查看jconsole中的接口显示返回类型是CompositeData(数据实际上作为CompositeDataSupport返回).我想输出与此对象关联的所有键/值对.
问题是接口似乎有一个"values()"方法,无法获取密钥.我在这里错过了什么吗?还有其他方法可以完成这项任务吗?
谢谢!
在JConsole中查看JMX bean时,它会将给定域部分下的所有bean呈现为层次结构.(JVisualVM与JConsole MBeans插件具有相同的行为.)
我意识到JMX对象名称不是分层的,但JConsole仍然按某种顺序选择键,以便它可以分层次地呈现它们.
有人知道它用来订购钥匙的规则是什么吗?它似乎不是从左到右或按字母顺序排列的.
谢谢.
我知道当在这个JVM上发生OutOfMemoryException时可以转储堆,但是可以用jmap或jconsole等工具询问实时转储吗?
我通过在jconsole中调用com.sun.management.HotSpotDiagnostic MXBean的dumpHeap操作来手动执行堆转储.所以我得到了一个转储文件.
我的问题:jconsole可以读取转储文件吗?如果没有,哪个工具可以读取它?谢谢!
编辑:现在我知道jconsole不提供读取功能,我想知道为什么jconsole只写没有读取功能的转储文件.(这不是我的问题,我只是关于它的问题)
我在我的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在命令的末尾.我试过了,程序试图连接,然后说连接失败(之前它只是在登录界面说它).
我有一个作为win-service运行的应用程序(使用Apache-Procrun).我想用JVisualVM监视该应用程序.我--openpid <PID>没有成功使用命令行参数,具有讽刺意味的是,旧的JConsole设法连接到该应用程序.

我还检查%TMP%\hsperfdata_username了JVisualVM- 故障排除指南中描述的-Directory的所有问题.一切都很好.
如何让JVisualVM监控我的应用程序?
美好的一天,人们,
我正在尝试使用jconsole连接到远程Wildfly 8 Final服务器.这不起作用:连接失败.经过多次尝试和失败后,我试图让它至少连接到我的'localhost'jboss,但即使这样也行不通.没有错误,它只是没有连接并说"连接失败".
细节:
基本上它是Wildfly 8 Final的全新安装,管理用户创建并且jconsole无法远程连接到它.
还有我尝试过的其他内容:我已经阅读了很多有关jconsole和Jboss AS 7.x的人的帖子.我已经尝试过这些线程的建议,但都没有奏效.另外,Wildfly 8似乎有不同的JMX版本(Jboss 7.x中的1.3 vs 1.1),所以我认为这就是为什么Jboss 7.x的standalone.xml建议不能用于Wildfly 8 Final.
我正在尝试连接到服务器上运行的远程jboss实例.我使用以下连接URL
服务:JMX:远程-JMX://90.214.64.170:9999
当我这样做时,我在控制台窗口中收到以下2个错误

选择不安全后,我会看到这个

我有,在通过jconsole连接之前也去了我的jboss服务器的bin目录并运行./jconsole.sh,它输出以下命令行
CLASSPATH /usr/bin/java/jdk1.8.0_11/lib/jconsole.jar:/usr/bin/java/jdk1.8.0_11/lib/tools.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/remoting-jmx/main/remoting-jmx-1.1.2.Final-redhat-1.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/remoting3/main/jboss-remoting-3.2.18.GA-redhat-1.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/logging/main/jboss-logging-3.1.2.GA-redhat-1.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/xnio/main/xnio-api-3.0.7.GA-redhat-1.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/xnio/nio/main/xnio-nio-3.0.7.GA-redhat-1.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/sasl/main/jboss-sasl-1.0.3.Final-redhat-1.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/marshalling/main/jboss-marshalling-1.4.2.Final-redhat-1.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/marshalling/river/main/jboss-marshalling-river-1.4.2.Final-redhat-1.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/as/cli/main/jboss-as-cli-7.3.0.Final-redhat-14.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/staxmapper/main/staxmapper-1.1.0.Final-redhat-2.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/as/protocol/main/jboss-as-protocol-7.3.0.Final-redhat-14.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/dmr/main/jboss-dmr-1.2.0.Final-redhat-1.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/as/controller-client/main/jboss-as-controller-client-7.3.0.Final-redhat-14.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/threads/main/jboss-threads-2.1.1.Final-redhat-1.jar
Run Code Online (Sandbox Code Playgroud)
我不知道还有什么我可以尝试(也开了端口9999)让这个工作,有没有人有任何建议或提示,可能有助于解决这个问题?
谢谢
编辑
将我的standalone.conf文件修改为此文件
#
# Specify options to pass to the Java VM.
#
if [ "x$JAVA_OPTS" = "x" ]; then
JAVA_OPTS="-Xms1303m -Xmx1303m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true"
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9999"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
else
echo "JAVA_OPTS already set in environment; overriding default settings with values: $JAVA_OPTS"
fi
Run Code Online (Sandbox Code Playgroud)
我仍然无法连接 - 与上面相同的错误
我的基础架构以这种方式构建(在AWS上):
|NAT| <--> |ServerA| <--> |DockerContainer| <--> |GlassFish4.0|
Run Code Online (Sandbox Code Playgroud)
ServerA有一个运行Glassfish 4.0版的Docker容器
ServerA通过NAT服务器访问Internet.
要连接到ServerA,我要通过SSH连接到NAT服务器,然后SSH到ServerA.
这个运行顺利,没有任何问题.
现在我需要将本地计算机上的JConsole连接到GlassFish服务器,这是我遇到问题并需要一些帮助的地方.
我将以下JVM选项添加到domain.xml文件中:
<jvm-options>-Dsun.management.jmxremote.level=FINEST</jvm-options>
<jvm-options>-Dsun.management.jmxremote.handlers=java.util.logging.ConsoleHandler</jvm-options>
<jvm-options>-Djava.util.logging.ConsoleHandler.level=FINEST</jvm-options>
<jvm-options>-Dcom.sun.management.jmxremote.local.only=false</jvm-options>
<jvm-options>-Dcom.sun.management.jmxremote.ssl=false</jvm-options>
<jvm-options>-Dcom.sun.management.jmxremote.authenticate=false</jvm-options>
<jvm-options>-Dcom.sun.management.jmxremote.port=9010</jvm-options>
<jvm-options>-Dcom.sun.management.jmxremote.rmi.port=9010</jvm-options>
<jvm-options>-Dcom.sun.management.jmxremote.host=0.0.0.0</jvm-options>
<jvm-options>-Djava.rmi.server.hostname=10.0.0.115</jvm-options>
Run Code Online (Sandbox Code Playgroud)
其中10.0.0.115(对于java.rmi.server.hostname)是ServerA的本地地址.
然后我创建一个从我的本地机器到NAT服务器的SSH隧道,如下所示:
ssh -L 9010:localhost:9010 nat
Run Code Online (Sandbox Code Playgroud)
然后我像这样建立另一个到ServerA的SSH隧道:
ssh -L 9010:localhost:9010 serverA
Run Code Online (Sandbox Code Playgroud)
在docker容器上,我在docker run上公开了端口9010,如下所示:
docker run --restart=always --name $CONTAINER_NAME \
-d \
-p 4848:4848 \
-p 8080:8080 \
-p 9010:9010 \
my container
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试连接JConsole时,我使用localhost:9010但失败了.
我试图telnet到localhost 9010,看起来它成功了:
telnet localhost 9010
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^C^C^C^C^C^C
^]
::
exit
^Z^Z^X^C^V^M
Connection …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Ubuntu计算机上的JConsole工具连接到在另一台计算机上运行的远程Java进程。
这就是我在远程计算机上运行Java程序的方式:
sudo java -Dcom.sun.management.jmxremote.port = 51082 -Dcom.sun.management.jmxremote.authenticate = false -Dcom.sun.management.jmxremote.ssl = false -jar myfile.jar
我在我的机器上像这样运行JConsole命令:
jconsole-调试-J-Djava.util.logging.config.file = Logging.properties
这是我的Logging.properties文件:
handlers = java.util.logging.ConsoleHandler
sun.rmi.level=FINEST
.level = INFO
java.util.logging.ConsoleHandler.level = FINEST
java.util.logging.ConsoleHandler.formatter = \
java.util.logging.SimpleFormatter
// Use FINER or FINEST for javax.management.remote.level - FINEST is
// very verbose...
javax.management.level = FINEST
javax.management.remote.level = FINER
Run Code Online (Sandbox Code Playgroud)
现在在我的Jconsle UI上,我给出了以下属性:

当我单击Connect按钮时,出现异常提示:
FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://my-remote-host:51082/jmxrmi] failed to connect: java.lang.SecurityException: Expecting a sun.rmi.server.UnicastRef2 remote reference in stub!
java.lang.SecurityException: Expecting a sun.rmi.server.UnicastRef2 remote reference …Run Code Online (Sandbox Code Playgroud)