使用JDK 1.6自带的jvisualvm监控远程服务器中Java程序资源占用情况

使用JDK 1.6自带的jvisualvm监控远程服务器中Java程序资源占用情况

Unix/Linux系统技术杂谈, by 陈威.
热度:

 

      因为做实验的需要,最近把实验室的Web数据抽取程序修改为多线程版本并在服务器上做大量的数据抽取工作,服务器是Ubuntu Server 10.01版本,通过Putty连接监控程序的运行情况非常不直观,需要使用一个Java资源监控程序实现对目标程序的实时监控。Jdk1.5版本提供的监控工具是Jconsole,相信很多早期的Java开发人员都使用过这个程序,但Jconsole的界面实在是有点对不起观众,所以在jdk1.6中Oracle提供了一个新的可视化的JVM监控工具Java VisualVM(官方介绍链接:http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/applications_remote.html),在Windows系统下的Java VisualVM启动路径是$java_home$/jdk1.6.0/bin/jvisualvm.exe
      双击启动Java VisualVM后可以看到窗口左侧“应用程序”栏中有“本地”、“远程”、“快照”三个项目。其中“本地”下显示的是在localhost运行的Java程序的资源占用情况,如果本地有Java程序在运行的话启动Java VisualVM即可看到相应的程序名,点击程序名打开相应的资源监控菜单,以图形的形式列出程序所占用的CPU、Heap、PermGen、类、线程的统计信息。“远程”项下列出的远程主机上的Java程序的资源占用情况,但需要在远程主机上运行jstatd守护程序,下面就以实现对远程Ubuntu Server中运行的Java程序资源监控为例说明如何使用Java VisualVM监控远程Java程序。
      (1)在服务器上安装jstatd组件。由于安装JDK时配置选项的原因,有的服务器中没有默认安装jstatd组件。jstatd是openjdk中的一个package,使用apt-get命令安装openjdk即可。关于jstatd组件的详细介绍可参考:http://download.oracle.com/javase/6/docs/technotes/tools/share/jstatd.html

sudo apt-get install openjdk-6-jdk

      (2)在服务器上配置jstatd的security policy文件。jstatd是一个监控JVM从创建到销毁过程中资源占用情况并提供远程监控接口的RMI(Remote Method Invocation,远程方法调用)服务器程序,它是一个Daemon程序,要保证远程监控软件连接到本地的话需要jstatd始终保持运行。jstatd运行需要通过-J-Djava.security.policy=***指定安全策略,因此我们需要在服务器上建立一个指定安全策略的文件jstatd.all.policy,文件内容如下:

grant codebase "file:${java.home}/../lib/tools.jar" {
   permission java.security.AllPermission;
};

      (3)修改服务器hosts文件中的IP地址。要使Java VisualVM成功连接到远程服务器上,服务器端应该在/etc/hosts文件中把本机地址设为本机的IP地址。使用hostname -i命令查看,如果显示的是127.0.0.1或者与本机实际IP不一致的话,需要把/etc/hosts文件中相应的地址改为本机实际IP。
      (4)运行jstatd守护程序。由于jstatd需要保持一直运行,所以建议使用screen命令执行jstatd程序,命令如下:

screen jstatd -J-Djava.security.policy=jstatd.all.policy

如果需要RMI日志功能的话,还可以在启动参数中加入-J-Djava.rmi.server.logCalls=true。jstatd开始运行后,使用CTRL+A+D断开screen界面,回到shell界面。如果想切换回jstatd运行界面的话,使用screen -r -d命令即可。
      (5)通过Java VisualVM连接到服务器监控Java程序。在Java VisualVM程序窗口左侧“远程”项目右键选择“添加远程主机”,在弹出的对话框中输入远程主机的IP地址,确认提交后即可看到相应的远程主机和在上面运行的Java程序,连接成功后应该会显示Jstatd及其PID。

 

另外一种方式:

tomcat catalina中配置

JAVA_OPTS=' -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false'

 

 

http://www.chenweionline.cn/archives/56.htm

 

 

你可能感兴趣的:(java,jdk,oracle,应用服务器,ubuntu)