摘要:
HotSpot JVM 监控可分为可视化监控和字符界面监控两大类.其中,可视化监控主要VisualVm和JConsole,用的较多的还是VisualVm;字符界面监控是根本,可视化监控都是从字符界面做起的,主要采用jps/jstat/jinfo等进行监控。上述都是Sun JDK 中自带的。下文主要是介绍VisualVm的使用。
visualvm简要说明
VisualVm 在JDK1.6 update 7 中首次出现,具有很强的向下兼容能力,能向下兼容1.4.2平台,但并非所有的功能都能完美的向下兼容。它是基于NetBeans平台开发的,支持插件扩展。目前官方http://visualvm.java.net/ 最新版本是1.3.5。
创建jvisualvm.exe的快捷方式,右键快捷方式选择属性,在“目标”栏中追加"-XX:+PerfBypassFileSystemCheck"
程序运行后会自动监控本机运行的java程序(Local标签下,远程服务器上的java程序需要另行配置),如果是下载的visualvm,解压后,运行bin目录下的visualvm.exe即可
Local标签下的第一个VisualVM为visualvm对自身的监控,消耗的资源还是很少的
第二个为本机的eclipse
监控项如图,visual GC 是我装的插件。
监控服务器上的tomcat
tomcat的配置文件catalina.sh中增加:
参数说明:
右键创建一个jmx连接:
填写上端口号即可:
配置完成:
监控服务器上的java程序
相较于监控tomcat要麻烦很多,要预先启动jstatd服务(${java_home}/bin目录下)
jstatd是一个监控JVM从创建到销毁过程中资源占用情况并提供远程监控接口的RMI(Remote Method Invocation,远程方法调用)服务器程序,它是一个Daemon程序(后台进程),要保证远程监控软件连接到本地的话需要jstatd始终保持运行。
jstatd运行需要通过-J-Djava.security.policy=***指定安全策略,因此我们需要在服务器上建立一个指定安全策略的文件jstatd.all.policy(我放在了${java_home}/bin目录下),文件内容如下:
然后使用这个策略文件启动jstatd服务
因为监控的过程中需要jstatd服务一直运行,所以加上了&,如果需要日志也可使用:
接下来就可以在visualvm中配置监控该服务器上运行的java程序了,和在visualvm中配置监控tomcat服务器的操作过程是一样的
需要特别注意的是,有时在配置远程监控java程序的时候visualvm会报一个错误
点击查看错误详情:
connection refused to host:127.0.0.1初步判断和主机名有关系
修改完重启jstatd服务(网上很多人说要修改主机的/etc/hosts文件,但是我自己测试修改/etc/hosts文件是没有效果的,必须要修改主机名)
直接选择默认配置即可(默认使用1099端口):
点击ok后,168上的所有java程序就会自动列出:
后记:
(1)VisualVm 1.3.5 下载到本地后,解压,找到visualvm_135\bin,运行,报cannot find java 1.6 or higher,可找到VisalVM安装目录 /etc/visualvm.conf 文件,将其中的 jdkhome 注释打开,并配置上本机JDK绝对路径即可,如visualvm_jdkhome="D:/Software/Develop/jdk1.6.0_171"。而且,随JDK发布的VisualVm不能更新插件,推荐用1.3.5。
(2) VisualVm 1.3.5 不必在创建jvisualvm.exe的快捷方式“目标”栏中追加"-XX:+PerfBypassFileSystemCheck" ,就可实现本地监控。
(3) Eclipse 修改JVM参数的简便方法:修改配置文件eclipse.ini。还是那句话,可视化的背后一定是某种属性配置,文件,数据库。。。
(4) 开通jstad后,便会列出所有java程序,包括tomcat,所以,我觉得,倒是直接开通远程服务来的方便,包括在字符监控时,也需要开通jstd。
(5) 字符监控常用命令:
jps命令,查看本机器所有Java进程vmid
jps -l
jstat命令,跟踪某一Java进程GC运行情况
jstat -gcutil [vmid] 2000 (每2秒刷新一次)
jmap命令,强制Java进程生成当前堆快照(dump文件)
jmap -dump:format=b,file=c:/xxx.bin [vmid]
jstack命令,生成虚拟机当前线程快照
jstack -l [vmid] > c:/xxx.txt
上述内容主要转载自:http://blog.csdn.net/a19881029/article/details/8432368