HotSpot JVM 监控
来源:互联网 发布:wr886n设置访客网络 编辑:程序博客网 时间:2024/04/29 23:29
摘要:
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中增加:
- JAVA_OPTS="-Dcom.sun.management.jmxremote.port=9998
- -Dcom.sun.management.jmxremote.ssl=false
- -Dcom.sun.management.jmxremote.authenticate=false
- -Djava.rmi.server.hostname=192.168.58.164"
参数说明:
- 指定了JMX启动的代理端口,这个端口就是visualvm要连接的端口(9998端口不能被别的程序使用netstat -an|gerp 9998)
- Dcom.sun.management.jmxremote.port=9998
- 指定了JMX是否启用ssl
- Dcom.sun.management.jmxremote.authenticate=false
- 指定了JMX是否启用鉴权(需要用户名,密码鉴权)
- Dcom.sun.management.jmxremote.authenticate=false
- 指定了服务器主机名
- Djava.rmi.server.hostname=192.168.58.164
填写主机名:
右键创建一个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目录下),文件内容如下:
- grant codebase "file:/home/123/123/jdk1.5.0_15/lib/tools.jar" {
- permission java.security.AllPermission;
- };
然后使用这个策略文件启动jstatd服务
- [123@123 bin]$ pwd
- /home/123/123/jdk1.5.0_15/bin
- [123@123 bin]$ ./jstatd -J-Djava.security.policy=./jstatd.all.policy &
因为监控的过程中需要jstatd服务一直运行,所以加上了&,如果需要日志也可使用:
- ./jstatd -J-Djava.security.policy=./jstatd.all.policy -J-Djava.rmi.server.logCalls=true
接下来就可以在visualvm中配置监控该服务器上运行的java程序了,和在visualvm中配置监控tomcat服务器的操作过程是一样的
需要特别注意的是,有时在配置远程监控java程序的时候visualvm会报一个错误
点击查看错误详情:
connection refused to host:127.0.0.1初步判断和主机名有关系
- [123@123 bin]# hostname -i
- 127.0.0.1
- [123@123 bin]# hostname 192.168.58.168
修改完重启jstatd服务(网上很多人说要修改主机的/etc/hosts文件,但是我自己测试修改/etc/hosts文件是没有效果的,必须要修改主机名)
填写主机名:
这里要选添加一个jstatd连接:
直接选择默认配置即可(默认使用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
- HotSpot JVM 监控
- Hotspot JVM虚拟机常用监控工具
- HotSpot JVM
- JVM--hotspot
- Sun Microsystems’HotSpot JVM
- jvm hotspot虚拟机研究
- JVM虚拟机-对象(HotSpot)
- JVM——HotSpot
- HotSpot JVM收集器
- JVM(三)HotSpot
- HotSpot JVM垃圾收集原理
- HotSpot JVM 垃圾收集原理
- HotSpot JVM垃圾收集原理
- HotSpot JVM 垃圾收集原理
- Hotspot JVM manageable 参数列表
- HotSpot JVM 垃圾收集原理
- HotSpot JVM 垃圾收集原理
- HotSpot JVM 垃圾收集原理
- vmstat:报告虚拟内存统计信息
- [hadoop]成功搭建Hadoop集群后简单实验
- SQL 计算两日期之间的工作天数和过滤工作日(周六、周日)
- DBUS
- Android大图片裁剪终极解决方案(上:原理分析)
- HotSpot JVM 监控
- 字符串的拼接-MYSQL
- 基于WiEngine游戏引擎--背景移动
- properties读取工具类设计
- win7旗舰版自带的iis发布delphi写的isapi扩展的webservice
- ubuntu 12.04 下adb 工具无法使用(No such file or directory)的解决办法
- flash as3 内存管理和资源管理
- Android签名机制
- Android大图片裁剪终极解决方案(中:从相册截图)