目录
jmap(Memory Map)和jhat(Java Heap Analysis Tool)
当系统遇到一些问题或者异常的时候,我们往往会查看系统日志、JVM堆栈、GC日志,或者查看线程快照、堆转储快照等信息,然后进行一个客观的分析,最后找到问题。而查看这些最常用的就是JVM自带的监控分析工具。
JVM图形化监控和调优工具
JConsole
JConsole 是一个基于JMX 的图形监控工具,用于连接正在运行的JVM,可以以图表化的形式显示各种数据,并可通过远程连接监视远程的服务器VM 情况,此类工具可以较直观观察各种变化,但比较耗费资源。
在JDK 1.5之后JConsole 已经成为JDK 自带监控工具,只需要在命令行状态下输入jconsole,就可以开启监控界面
jconsole
可以选择远程监控或者本地监控
从jconsole 中可以不光光监控到内存情况,还可以监控例如:线程,类,JVM参数等等高级信息。jconsole 还可以根据内存等使用情况手动执行GC 清理,这给我们的程序监控与良好运行带来了很大的便利。值得注意的是jconsole可以同时监控多个JVM 进程,在jconsole 中可以轻松的切换监控界面。
- 概述选项(Overview):监控JVM和一些监控变量的信息。
- 内存选项(Memory):内存使用信息
- 线程选项(Threads):线程使用信息
- 类选项(Classes):类调用信息
- VM摘要(VM Summary):JVM的信息
- MBean选项(MBeans):所有MBean 的信息MBean 展示了所有以一般形式注册到JVM 上的MBean 。MBean 允许你获取所有的平台信息,包括那些不能从其他标签页获取到的信息。注意,其他标签页上的一些信息也在MBean 这里显示。另外,你可以使用 MBean 标签管理你自己的应用的MBean。
JvisualVm
JDK1.6 中Java 引入了一个新的可视化的JVM 监控工具:Java VisualVM。 运行VisualVM 非常简单,只需在命令行状态下输入:
jvisualvm |
“本地”列表下列出在本机运行的Java 程序的资源占用情况,如果本地有Java程序在运行的话启动VisualVM 即可看到相应的程序名,点击程序名打开相应的资源监控菜单,以图形的形式列出程序所占用的CPU、Heap、PermGen、类、线程的 统计信息
Jvmstat
图形版的jvmstat需要去官网下载安装包,使用jvmstat 之前需要配置相应环境变量,环境变量配置如下:
JVMSTAT_HOME:jvmstat安装目录 JVMSTAT_JAVA_HOME:JDK所在目录,与JAVA_HOME值相同 |
配置好两个环境变量之后就可以运行jvmstat 了,运行命令为:
visualgc pid |
从jvmstat 中可以清晰的观察到汇编,加载,垃圾回收消耗的时间与各区域内存使用情况,在图中s0与s1的内存使用永远都是相斥的,即至多只有一个会在使用。所以jvmstat 只能作为一款基本的图形监控工具。
jvmstat 作为一款基本的JVM 图形化监控工具,优点就是简单易用,我们可以非常直观的观察堆内存的使用情况,当然