对于这种方式,可能会遇到这样的问题,Eclipse无法监控。此时,我们需要在桌面创建一个快捷方式,
右键快捷方式选择属性,在“目标”栏中追加"-XX:+PerfBypassFileSystemCheck",自动识别到本地的运行的java 应用
PS: 对于这种方式,我没有成功,出现visualVM闪退的现象,在网上找了几个解决方案,仅供参考
可能原因以及解决方法:
vm参数上增加:-XX:+PerfBypassFileSystemCheck
程序运行后会自动监控本机运行的java程序(Local标签下,远程服务器上的java程序需要另行配置),如果是下载的jvisualvm,解压后,运行bin目录下的jvisualvm.exe即可.
我是选择下载,解压后,运行bin目录下的jvisualvm.exe(使用的版本是:visualvm_138)。然后打开Eclipse,此时看到如下图:
Local标签下的第一个VisualVM为jvisualvm对自身的监控,可以看到消耗的资源还是很少的,第二个为本机的eclipse
要预先启动jstatd服务(${java_home}/bin目录下)
jstatd是一个监控JVM从创建到销毁过程中资源占用情况并提供远程监控接口的RMI(Remote Method Invocation,远程方法调用)服务器程序,它是一个Daemon程序(后台进程),要保证远程监控软件连接到本地的话需要jstatd始终保持运行。
jstatd运行需要通过-J-Djava.security.policy=***指定安全策略,因此我们需要在服务器上建立一个指定安全策略的文件
例如:
我设置的Java home 目录:/usr/java/jdk1.6.0_45
新建一个策略文件jstatd.all.policy(我放在了/usr/java/jdk1.6.0_45/bin目录下),在里面添加以下内容来保证jstatd服务启动的时候不报异常(设置权限从只读到可读写):
grant codebase "file:/usr/java/jdk1.6.0_45/lib/tools.jar" {
permission java.security.AllPermission;
};
查看1099端口是否被占用了,如果被占用,则需要选择其他端口来启动jstatd服务
test@sha> netstat -ano | grep -i 1099
如果端口被占用,选择其它端口(例如5004),用以下方式启动jstatd服务:
test@sha> rmiregistry 5004 &
test@sha> ./jstatd -J-Djava.security.policy=./jstatd.all.policy -p 5004 &
如果没有被占用,然后使用这个策略文件启动jstatd服务,因为监控的过程中需要jstatd服务一直运行,所以加上了&
test@sha:/usr/java/jdk1.6.0_45> cd bin
test@sha:/usr/java/jdk1.6.0_45/bin> ./jstatd -J-Djava.security.policy=./jstatd.all.policy &
因为监控的过程中需要jstatd服务一直运行,所以加上了&,如果需要日志也可使用:
test@sha:/usr/java/jdk1.6.0_45/bin> ./jstatd -J-Djava.security.policy=./jstatd.all.policy -J-Djava.rmi.server.logCalls=true
检查启动的PID进程(Jstatd)
test@sha:/usr/java/jdk1.6.0_45/bin> jps
7871 Jstatd
7938 Jps
杀掉启动的PID进程(7871 Jstatd)
test@sha-colline-node-h:/usr/java/jdk1.6.0_45/bin> kill -9 7871
接下来就可以在jvisualvm中配置监控该服务器上运行的java程序了
填写主机名:
配置完成
默认端口是1099, 如果需要修改端口,则右键Add jstatd Connection
连接成功
PS: 常见问题
需要特别注意的是,有时在配置远程监控java程序的时候jvisualvm会报一个错误
点击查看错误详情:
connectionrefused to host:127.0.0.1初步判断和主机名有关系
需要设定hostname 为ipv4地址
test@sha> hostname -i
127.0.0.1
test@sha> hostname 172.20.30.8
jvisualvm也是可以安装插件的,具体步骤为tool -> plugin ->aviable plugin
安装完这个插件后,将会增加新的监控条目Visual GC,可以看到虚拟机内存各个区的使用情况
帮助文档:
http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstatd.html jstatd的帮助文档
http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/jmx_connections.html Java VisualVM帮助文档
参考文档:
http://blog.csdn.net/a19881029/article/details/8432368 (Java jvisualvm简要说明 )
http://blog.csdn.net/derek_zhang_/article/details/46043547 (visualvm remote access denied )
http://stevex.blog.51cto.com/4300375/771990 (JAVA VirtualVM远程监控配置 )