一.Java VisualVM 概述
?
class="p0" style="margin-top: 0pt; margin-bottom: 0pt;">? 对于使用命令行远程监控jvm?太麻烦?。?在jdk1.6?中?Oracle?提供了一个新的可视化的。?JVM?监控工具?Java?VisualVM?。jvisualvm.exe?在JDK?的?bin?目录下。
?
???双击启动?Java?VisualVM?后可以看到窗口左侧?“应用程序?”栏中有“?本地?”、“远程?”?、“快照?”三个项目。
?
??“本地?”下显示的是在?localhost?运行的?Java?程序的资源占用情况,如果本地有?Java?程序在运行的话启动?Java?VisualVM?即可看到相应的程序名,点击程序名打开相应的资源监控菜单,以图形的形式列出程序所占用的?CPU?、?Heap?、?PermGen?、类、线程的?统计信息。
?
??“远程”?项下列出的远程主机上的?Java?程序的资源占用情况,但需要在远程主机上运行?jstatd?守护程序
?
?
VisualVM分为?3?类,?本地?它会自动侦测到,并显示出来
?
双击Local?下的任一节点,看到右边的变化?,你可以监控?CPU?,内存,类,线程等运行状况,实时监控服务器性能。
?
?
?右键?VisualVM我们可以看到?Thread?Dump,?Heap?Dump
?做?Thread?Dump?很快,马上就可以看到结果
?
?
Heap?Dump要稍花费一些时间(可以看到当前?heap?里对象的数量及占用的比例,做?OOM?很好用)
?
?
?
对其功能不再做描述,可以查阅网上相关质量,我们主要讲的是如何使用?VisualVM?远程监控。
1.?测试环境
Ubuntu?Server?10.01
?
2.??在服务器上安装?jstatd?组件
使用apt-get?命令安装?openjdk?即可?:
?
Java代码???
3.?在服务器上配置?jstatd?的?security?policy?文件
?? jstatd是一个监控?JVM?从创建到销毁过程中资源占用情况并提供远程监控接口的?RMI?(?Remote?Method?Invocation?,远程方法调用)服务器程序,它是一个?Daemon?程序,要保证远程监控软件连接到本地的话需要?jstatd?始终保持运行。?
?? jstatd运行需要通过?-J-Djava.security.policy=***?指定安全策略,因此我们需要在服务器上建立一个指定安全策略的文件jstatd.all.policy?,文件内容如下:
?
Java代码???
?
4.?修改服务器?hosts?文件中的?IP?地址
?
?
?? 要使Java?VisualVM?成功连接到远程服务器上,服务器端应该在?/etc/hosts?文件中把本机地址设为本机的?IP?地址。使用?hostname?-i?命令查看,如果显示的是?127.0.0.1?或者与本机实际?IP?不一致的话,需要把?/etc/hosts?文件中相应的地址改为本机实际?IP?。
?
5.?运行?jstatd?守护程序
?
?
? 由于?jstatd?需要保持一直运行,所以建议使用?screen?命令执行?jstatd?程序,命令如下:
Java代码???
如果需要RMI?日志功能的话,还可以在启动参数中加入?-J-Djava.rmi.server.logCalls=true?。
Java代码???
?
jstatd开始运行后,使用?CTRL+A+D?断开?screen?界面,回到?shell?界面。如果想切换回?jstatd?运行界面的话,使用?screen?-r?-d命令即可。
?
6.?通过Java?VisualVM?连接到服务器监控?Java?程序
?? 在Java?VisualVM?程序窗口左侧?“?远程?”?项目右键选择?“?添加远程主机?”?,在弹出的对话框中输入远程主机的?IP?地址,确认提交后即可看到相应的远程主机和在上面运行的?Java?程序,连接成功后应该会显示?Jstatd?及其?PID?。
?
?
? 通过以上方式连接服务器发现一个问题,不能监控CPU?。提示我们建立?JMX?,建立?JMX?提示要求端口号。(?JMX:Java?Management?Extensions?,即?Java?管理扩展?,?是一个为应用程序、设备、系统等植入管理功能的框架。?JMX?可以跨越一系列异构操作系统平台、系统体系结构和?网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用?。而Visual?VM是通过?JMX?来和远程?Java?应用联系的?)。
?
?
7.?T?omcat中配置
? 下面我们为54?服务器的?tomcat?配置?jvm?启动参数。?在?tomcat?的?catalina.sh?中添加如下参数:
Java代码???
或:
Java代码???
??
注:1.?-Dcom.sun.management.jmxremote.port?:这个是配置远程?connection?的端口号的,要确定这个端口没有被占用
2.?-Dcom.sun.management.jmxremote.ssl=false?指定了?JMX?是否启用?ssl
3.?-Dcom.sun.management.jmxremote.authenticate=false???指定了JMX?是否启用鉴权(需要用户名,密码鉴权)
?? 2,3两个是固定配置,是?JMX?的远程服务权限的
4.?-Djava.rmi.server.hostname?:这个是配置?server?的?IP?的
?
?
连接成功,现在我们可以远程监控服务器性能,可以配合?jmeter?进行了一个长时间的加压,在加压过程中重点关注了系统资源的使用情况。
http://mahuihuang.blog.163.com/blog/static/745292520113202321494/
?
http://wolfdream.iteye.com/blog/1032712
?
http://sjsky.iteye.com/blog/705323