VisualVM监视

来源:互联网 发布:免费网络硬盘哪个好 编辑:程序博客网 时间:2024/05/21 04:44

整理下怎么通过JDK提供的视图化工具来监视java应用。

1.配置文件

远程机器上,建立jstatd 的 security policy 文件,比如建立在$JAVA_HOME/bin目录下:
文件jstatd.all.policy:
grant codebase "file:${java.home}/../lib/tools.jar" {
   permission java.security.AllPermission;
};

2.启动jstatd

同样,也是在远程机器上,进入$JAVA_HOME/bin目录,执行:
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.logCalls=false -p 1099 &

jstatd的详细说明可以参照:http://docs.oracle.com/javase/6/docs/technotes/tools/share/jstatd.html
这里有对jstatd各个命令选项的详细说明。

3.打开监视客户端

一样来说,我会在客户端(比如本机PC)来监视远程机器,进入客户端的jdk/bin目录下,会看到有jvisualvm.exe
打开jvisualvm.exe,


如果需要添加监视的插件,可以进入:工具->插件,进行下载初始化相关的插件来,这里我已经初始化了Visual GC来监视内存方面。


可以监视:本地、远程和快照。
本地会自动扫描到本地的java应用
而远程需要添加远程的ip
添加远程ip后,发现还是无法自己扫描到远程的java应用时,可能是没将远程机器的ip设置好,
执行命令hostname -i
如果是127.0.0.1,则需要设置成远程机器的/etc/hosts文件,将远程机器ip设置(而不是127.0.0.1),

设置好远程机器ip后,可以自动扫描到远程的java应用了。

如果设置好hostname还是无法扫描到java应用,则需要启动Jstatd时还加上参数-J-Djava.rmi.server.hostname=192.168.20.112,192.168.20.112为远程hostname。


可以扫描到远程的java应用,但发现监视不了CPU这项,这个需要我们添加JMX监视,

需要在java应用的启动参数加上:
-Djava.rmi.server.hostname=192.168.20.112 -Dcom.sun.management.jmxremote.port=18999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
其中192.168.20.112是远程被监视机器的ip。
如果需要设置JMX连接密码,可以-Dcom.sun.management.jmxremote.authenticate=true

详细添加JMX可以参照:https://htmlpreview.github.io/?https://raw.githubusercontent.com/visualvm/visualvm.java.net.backup/master/www/jmx_connections.html


4.JMX密码连接

在$JAVA_HOME//jre/lib/management目录下的jmxremote.password.template文件,复制一份名字改成jmxremote.password,

# Following are two commented-out entries.  The "measureRole" role has# password "QED".  The "controlRole" role has password "R&D".## monitorRole  QED# controlRole   R&D

打开注释:

monitorRole  QEDcontrolRole   R&D

则表示JMX的连接角色密码为monitorRole / QED,或者controlRole / R&D,这两种是不同的角色,在文件jmxremote.access(也是在同一个目录下)中会说明这两个角色的权限:

# Default access control entries:# o The "monitorRole" role has readonly access.  # o The "controlRole" role has readwrite access and can create the standard#   Timer and Monitor MBeans defined by the JMX API.monitorRole   readonlycontrolRole   readwrite \              create javax.management.monitor.*,javax.management.timer.* \              unregister
连接JMX时,输入对应角色密码即可:



远程机器的java应用重新启用后,则监视客户端需要添加JMX连接,连接成功后,则可以看到CPU等监视项了。

...

原创粉丝点击