jvisualvm远程监控Tomcat

来源:互联网 发布:mysql递归 编辑:程序博客网 时间:2024/05/29 23:46

VisualVM 简介


VisualVM 是一个工具,它提供了一个可视界面,用于查看 Java 虚拟机 (Java Virtual Machine, JVM) 上运行的基于 Java 技术的应用程序(Java 应用程序)的详细信息。VisualVM 对 Java Development Kit (JDK) 工具所检索的 JVM 软件相关数据进行组织,并通过一种使您可以快速查看有关多个 Java 应用程序的数据的方式提供该信息。您可以查看本地应用程序以及远程主机上运行的应用程序的相关数据。此外,还可以捕获有关 JVM 软件实例的数据,并将该数据保存到本地系统,以供后期查看或与其他用户共享。

为了能充分利用所有的 Java VisualVM 功能,应运行 Java Platform, Standard Edition (Java SE) 版本 6。

启动 VisualVM

在下载 VisualVM zip 归档文件并将其解压缩到本地系统之后,导航至展开的归档文件的 bin 目录,然后双击 VisualVM 可执行文件,或在命令 (shell) 提示符下键入以下内容:

visualvm

首次启动 VisualVM 时,系统将提示您接受许可证协议。

VisualVM 用户目录

在 Windows 上,VisualVM 用户目录的缺省位置为:

C:\Documents and Settings\<USER>\Application Data\.visualvm\FCS

要查找 VisualVM 用户目录的位置,请从主菜单中选择“帮助”>“关于”,然后在“关于 VisualVM”窗口中单击“详细信息”。

VisualVM 窗口

在启动 VisualVM 后,将打开 VisualVM 主窗口。VisualVM 主窗口分为两个窗口。

屏幕快照:包含起始屏幕的 VisualVM 窗口

首次启动 VisualVM 时,“应用程序”窗口显示在主窗口的左侧,“起始页”显示在主窗口的右侧。“起始页”包含指向 VisualVM 文档 Web 页和其他资源的链接。
注意:缺省情况下,每次启动 VisualVM 时都将打开“起始页”。通过从主菜单中选择“帮助”>“起始页”,可以随时打开“起始页”。此外,还可以通过取消选中“启动时显示”复选框隐藏“起始页”。

“应用程序”窗口

启动应用程序后,将在 VisualVM 主窗口的左侧打开“应用程序”窗口。“应用程序”窗口是浏览正在运行的应用程序详细信息的主入口点。“应用程序”窗口采用树结构,以便您可以快速查看本地计算机和任何已连接的远程计算机上运行的应用程序。您还可以从“应用程序”窗口中访问核心 dump (Solaris/Linux) 和保存的快照。

右键单击“应用程序”窗口中的某个节点将打开一个弹出式菜单,通过该菜单可以执行与该节点相关的操作,其中包括打开应用程序标签、生成堆 dump 和线程 dump,以及在主窗口中打开快照。

有关如何使用“应用程序”窗口查看和保存数据的更多详细信息,请参见以下页面:

  • Using the Applications Window(使用“应用程序”窗口)
  • Working with Local Applications(使用本地应用程序)
  • Working with Remote Applications(使用远程应用程序)
  • 使用 VM 核心 dump
  • Working with Snapshots(使用快照)

主窗口

主窗口中显示有关应用程序的详细信息。在查看有关应用程序的数据时,主窗口中的每个标签表示一个应用程序,这使您可以轻松查看和导航数据。保存的线程 dump 和堆 dump 也可以在主窗口中打开。

有关主窗口中可以显示的应用程序数据的信息,请参见以下页面:

  • 应用程序“概述”标签
  • 在“监视”标签中监视应用程序
  • 在“线程”标签中监视线程
  • Browsing a Heap Dump(浏览堆 Dump)
  • 在 "Profiler" 标签中对应用程序进行性能分析(仅限本地应用程序)
  • MBeans Tab("MBeans" 标签,需要 MBeans 插件)

VisualVM 插件

通过使用“插件”管理器安装由“VisualVM 插件中心”提供的插件,可以向 VisualVM 添加功能。您也可以开发自己的插件,然后将其添加到更新中心来扩展 VisualVM 的功能。

例如,安装 VisualVM-MBeans 插件可以向应用程序标签中添加 "MBeans" 标签,通过此标签,可以在 VisualVM 内监视和管理 MBeans。

安装 VisualVM 插件:

  1. 从主菜单中选择“工具”>“插件”。
  2. 在“可用插件”标签中,选中该插件的“安装”复选框。单击“安装”。
  3. 逐步完成插件安装程序。
屏幕快照:“插件”窗口

有关创建 VisualVM 插件的更多信息,请参见以下文档:

  • Getting Started Extending VisualVM(VisualVM 扩展入门指南)



一.Java VisualVM 概述


  对于使用命令行远程监控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 远程监控。


二.使用visualvm 远程监控 JVM  

1. 测试环境

Ubuntu Server 10.01

 

2.  在服务器上安装 jstatd 组件

使用apt-get 命令安装 openjdk 即可 :

 

Java代码  收藏代码
  1. sudo apt-get install openjdk-6-jdk  

 

3. 在服务器上配置 jstatd 的 security policy 文件

   jstatd是一个监控 JVM 从创建到销毁过程中资源占用情况并提供远程监控接口的 RMI ( Remote Method Invocation ,远程方法调用)服务器程序,它是一个 Daemon 程序,要保证远程监控软件连接到本地的话需要 jstatd 始终保持运行。 

   jstatd运行需要通过 -J-Djava.security.policy=*** 指定安全策略,因此我们需要在服务器上建立一个指定安全策略的文件jstatd.all.policy ,文件内容如下:

 

Java代码  收藏代码
  1. grant codebase "file:${java.home}/../lib/tools.jar" {  
  2.    permission java.security.AllPermission;  
  3. };  

 

 

4. 修改服务器 hosts 文件中的 IP 地址

 

   要使Java VisualVM 成功连接到远程服务器上,服务器端应该在 /etc/hosts 文件中把本机地址设为本机的 IP 地址。使用 hostname -i 命令查看,如果显示的是 127.0.0.1 或者与本机实际 IP 不一致的话,需要把 /etc/hosts 文件中相应的地址改为本机实际 IP 。

 

5. 运行 jstatd 守护程序

 

  由于 jstatd 需要保持一直运行,所以建议使用 screen 命令执行 jstatd 程序,命令如下:

Java代码  收藏代码
  1. screen jstatd -J-Djava.security.policy=jstatd.all.policy  

 

如果需要RMI 日志功能的话,还可以在启动参数中加入 -J-Djava.rmi.server.logCalls=true 。

Java代码  收藏代码
  1. screen jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.logCalls=true  

 

 

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代码  收藏代码
  1. JAVA_OPTS='-Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false'   

 

或:

Java代码  收藏代码
  1. JAVA_OPTS=’-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.1.54  其他配置’  

 

 

 

注: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

 

0 0