jvisualvm 连接到远程 jstatd 不显示应用程序
jvisualvm connect to remote jstatd not showing applications
我在远程服务器 (Ubuntu 服务器 14.04) 上启动了 jstatd
:
jstatd -J-Djava.security.policy=.jstatd.all.policy -J-Djava.rmi.server.logCalltrue -p 9099
并尝试在 windows 上使用 jvisualvm 连接到它。我检查了 netstat
,连接已建立,并且在远程记录了调用:
Sep 11, 2015 12:48:51 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(4)-10.82.199.0: [10.82.199.0: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Sep 11, 2015 12:48:55 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(4)-10.82.199.0: [10.82.199.0: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Sep 11, 2015 12:48:59 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(4)-10.82.199.0: [10.82.199.0: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
所有迹象都表明它正在发挥作用。但是 jvisualvm 中没有显示任何应用程序:
显然,VisualVM 希望您尝试远程连接的服务器具有一致的 DNS 名称(在您的情况下为 Ubuntu 服务器 14.04)。因此,如果您为 VisualVM 指定 IP 地址而不是 DNS 名称,则应将以下内容添加到 jstatd 启动行:
-J-Djava.rmi.server.hostname=<the IP address to your Ubuntu server here>
另外,我发现指定端口选项(在你的例子中是-p 9099)是不是在某些 VisualVM 版本中支持:
Known limitation: In this VisualVM release the jstatd's default port and rminame must be used when starting the jstatd utility, i.e. the use of the -p and -n options is not supported.
VisualVM Troubleshooting Guide
总而言之,您应该在 Ubuntu 服务器上尝试 运行 以下 jstatd 行:
jstatd -J-Djava.security.policy=.jstatd.all.policy -J-Djava.rmi.server.hostname=10.82.83.117 -J-Djava.rmi.server.logCalltrue
来源:
jstatd -p 1099 -J-Djava.rmi.sver.hostname=10.250.105.112 -J-Djava.security.policy=<(echo 'grant codebase "file:${java.home}/../lib/tools.jar" {permission java.security.AllPermission;};')
非常适合我
如果这对其他人有帮助...
我 运行 遇到了 jstatd
和在 VisualVM 中添加普通 JMX 连接都不起作用的问题。前者不会给出任何错误消息,它只是不会列出任何应用程序。后者会给我一个错误,说 "Cannot connect to some-server:30648 using service:jmx:rmi:///jndi/rmi://some-server:30648/jmxrmi
.
尝试使用优秀的sjk-plus工具手动连接JMX服务报错如下:
$ java --add-opens java.base/jdk.internal.perf=ALL-UNNAMED \
--add-opens jdk.attach/sun.tools.attach=ALL-UNNAMED \
-Dsjk.breakCage=false \
-jar scripts/sjk-plus-0.14.jar
mx --get --allMatched -b com.acme.some.package:name=* -f Count \
-s some-server:30648
JMX Connection failed: java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is:
java.net.ConnectException: Connection refused (Connection refused)
你看到了吗? 127.0.1.1,那个奇怪的 IP 地址在做什么?
这是由服务器上 /etc/hosts
文件中的特定条目引起的:
user@some-server:~$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 some-server
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
更改 hosts
文件中的 some-server
条目并重新启动进程使其与 sjk-plus
一起工作,并使其也可通过 jstatd
被发现。
在java11+
jstatd -J-Djava.rmi.server.logCalls=true \
-J-Djava.security.policy=.jstatd.all.policy \
-J-Djava.net.preferIPv4Stack=true \
-J-Djava.security.policy=<(echo 'grant codebase "jrt:/jdk.jstatd" {permission java.security.AllPermission;}; grant codebase "jrt:/jdk.internal.jvmstat" {permission java.security.AllPermission;};')
我在远程服务器 (Ubuntu 服务器 14.04) 上启动了 jstatd
:
jstatd -J-Djava.security.policy=.jstatd.all.policy -J-Djava.rmi.server.logCalltrue -p 9099
并尝试在 windows 上使用 jvisualvm 连接到它。我检查了 netstat
,连接已建立,并且在远程记录了调用:
Sep 11, 2015 12:48:51 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(4)-10.82.199.0: [10.82.199.0: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Sep 11, 2015 12:48:55 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(4)-10.82.199.0: [10.82.199.0: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Sep 11, 2015 12:48:59 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(4)-10.82.199.0: [10.82.199.0: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
所有迹象都表明它正在发挥作用。但是 jvisualvm 中没有显示任何应用程序:
显然,VisualVM 希望您尝试远程连接的服务器具有一致的 DNS 名称(在您的情况下为 Ubuntu 服务器 14.04)。因此,如果您为 VisualVM 指定 IP 地址而不是 DNS 名称,则应将以下内容添加到 jstatd 启动行:
-J-Djava.rmi.server.hostname=<the IP address to your Ubuntu server here>
另外,我发现指定端口选项(在你的例子中是-p 9099)是不是在某些 VisualVM 版本中支持:
Known limitation: In this VisualVM release the jstatd's default port and rminame must be used when starting the jstatd utility, i.e. the use of the -p and -n options is not supported. VisualVM Troubleshooting Guide
总而言之,您应该在 Ubuntu 服务器上尝试 运行 以下 jstatd 行:
jstatd -J-Djava.security.policy=.jstatd.all.policy -J-Djava.rmi.server.hostname=10.82.83.117 -J-Djava.rmi.server.logCalltrue
来源:
jstatd -p 1099 -J-Djava.rmi.sver.hostname=10.250.105.112 -J-Djava.security.policy=<(echo 'grant codebase "file:${java.home}/../lib/tools.jar" {permission java.security.AllPermission;};')
非常适合我
如果这对其他人有帮助...
我 运行 遇到了 jstatd
和在 VisualVM 中添加普通 JMX 连接都不起作用的问题。前者不会给出任何错误消息,它只是不会列出任何应用程序。后者会给我一个错误,说 "Cannot connect to some-server:30648 using service:jmx:rmi:///jndi/rmi://some-server:30648/jmxrmi
.
尝试使用优秀的sjk-plus工具手动连接JMX服务报错如下:
$ java --add-opens java.base/jdk.internal.perf=ALL-UNNAMED \
--add-opens jdk.attach/sun.tools.attach=ALL-UNNAMED \
-Dsjk.breakCage=false \
-jar scripts/sjk-plus-0.14.jar
mx --get --allMatched -b com.acme.some.package:name=* -f Count \
-s some-server:30648
JMX Connection failed: java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is:
java.net.ConnectException: Connection refused (Connection refused)
你看到了吗? 127.0.1.1,那个奇怪的 IP 地址在做什么?
这是由服务器上 /etc/hosts
文件中的特定条目引起的:
user@some-server:~$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 some-server
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
更改 hosts
文件中的 some-server
条目并重新启动进程使其与 sjk-plus
一起工作,并使其也可通过 jstatd
被发现。
在java11+
jstatd -J-Djava.rmi.server.logCalls=true \
-J-Djava.security.policy=.jstatd.all.policy \
-J-Djava.net.preferIPv4Stack=true \
-J-Djava.security.policy=<(echo 'grant codebase "jrt:/jdk.jstatd" {permission java.security.AllPermission;}; grant codebase "jrt:/jdk.internal.jvmstat" {permission java.security.AllPermission;};')