前几篇我 们学习了,JVM里面的运行结构,GC算法,以及各种垃圾收集器的优劣点,那么本篇我们来看下如何使用一些虚拟机性能监控工具,来监控和快速处理故障,当 JVM出现一些故障时,我们通常从如下的几个方面进行着手分析,包括运行日志,异常堆栈,GC日志,线程快照(threaddump/javacore文 件),堆转储快照(heapdump/hprof文件),熟练掌握这些工具,可以帮我们更好更快弄清或解决一些难易解决的复杂问题。
下面看下SUN JDK自带的几款故障定位工具:
序号 | 名称 | 描述 |
1 | jps | JVM Process Status Tool ,显示指定系统内所有的HotSpot虚拟机进程 |
2 | jstat | 用于收集hotspot虚拟机各方面的运行数据 |
3 | jinfo | 显示虚拟机配置信息 |
4 | jmap | 生成虚拟机的内存转储快照 |
5 | jhat | 分析heap文件,它会建立一个http/html服务,让用户可以通过浏览器查看分析结果 |
6 | jstack | 显示虚拟机的线程快照 |
1,jps命令几个参数如下:
-q,只输出LVMID省略主类的名称
-m,输出虚拟机进程启动时,传递给主类的main函数的参数
-l,输出主类的全名,如果进程执行的是jar包,输出jar路径
-v,输出虚拟机启动时的JVM参数
2,jstat,虚拟机统计信息监视工具
命令格式,jstat vmid interval count,如果是远程机器,可以加上机器名和IP地址进行访问。
一个示例: jstat -gc 2764 250 20
选项option代表用户需要查询的虚拟机的信息,主要分为3类:类装载、垃圾回收和运行期的编译情况,具体如下表所示:
Option Function
-class 监视类的装载、卸载数量以及类的装载总空间和耗费时间等
-gc 监视Java堆,包含eden、2个survivor区、old区和永久带区域的容量、已用空间、GC时间合计等信息
-gccapcity 监视内容与-gc相同,但输出主要关注Java区域用到的最大和最小空间
-gcutil 监视内容与-gc相同,但输出主要关注已使用空间占总空间的百分比
-gccause 与-gcutil输出信息相同,额外输出导致上次GC产生的原因
-gcnew 监控新生代的GC情况
-gcnewcapacity 与-gcnew监控信息相同,输出主要关注使用到的最大和最小空间
-gcold 监控老生代的GC情况
-gcoldcapacity 与-gcold监控信息相同,输出主要关注使用到的最大和最小空间
-gcpermcapacity 输出永久带用到的最大和最小空间
-compiler 输出JIT编译器编译过的方法、耗时信息
-printcompilation 输出已经被JIT编译的方法
另外,使用jstat -gcutil 2764,比较常用的监控命令:
- [search@fsedump00yw ~]$ jstat -gcutil 7829
- S0 S1 E O P YGC YGCT FGC FGCT GCT
- 0.02 0.00 100.00 96.31 99.94 6504 53.595 9 12.097 65.692
- [search@fsedump00yw ~]$ jstat -gcutil 7829
- S0 S1 E O P YGC YGCT FGC FGCT GCT
- 0.00 0.09 6.05 96.31 99.94 6505 53.598 9 12.097 65.696
- [search@fsedump00yw ~]$
参数介绍:
E代表Eden,新生代区,两个survivor区,S0和S1,,老年代使用O来表示,永久带使用P表示,YGC(Minor GC) FULL FGC, FGCT代表FUCC GC耗时,GCT代表总的GC时间。
3,jinfo:实时查看虚拟机调整的各项参数
用法: jinfo option pid
4,jmap,JAVA内存影像工具
用法:jmap [option ] vmid
Option的信息如下表所示
Option Function
-dump 生成对应的dump信息,用法为-dump:[live,]format=b,file={fileName}
-finalizerinfo 显示在F-Queue中等待的Finalizer方法的对象(只在linux下生效)
-heap 显示堆的详细信息、垃圾回收器信息、参数配置、分代详情等
-histo 显示堆栈中的对象的统计信息,包含类、实例数量和合计容量
-permstat 以ClassLoder为统计口径显示永久带的内存状态
-F 当虚拟机对-dump无响应时可使用这个选项强制生成dump快照
示例:jmap -dump:format=b,file=heap.dump 20445
5,jhat ,虚拟机堆转储快照分析工具
hat是用来分析dump文件的一个微型的HTTP/HTML服务器,它能将生成的dump文件生成在线的HTML文件,让我们可以通过浏览器进 行查阅,然而实际中我们很少使用这个工具,因为一般服务器上设置的堆、栈内存都比较大,生成的dump也比较大,直接用jhat容易造成内存溢出,而是我 们大部分会将对应的文件拷贝下来,通过其他可视化的工具进行分析。启用法如下:
jhat {dump_file}
6,jstack JAVA堆栈跟踪工具:
stack用于JVM当前时刻的线程快照,又称threaddump文件,它是JVM当前每一条线程正在执行的堆栈信息的集合。生成线程快照的主 要目的是为了定位线程出现长时间停顿的原因,如线程死锁、死循环、请求外部时长过长导致线程停顿的原因。通过jstack我们就可以知道哪些进程在后台做 些什么?在等待什么资源等!其运行格式如下:
jstack [option] vmid
相关的option和function如下表所示
Option Function
-F 当正常输出的请求不响应时强制输出线程堆栈
-l 除堆栈信息外,显示关于锁的附加信息
-m 显示native方法的堆栈信息
示例:jstack -l 20445
上面说的都是基于命令行的的JVM指令的一些分析,下面看一下可视化的强大的工具.
1,jconsole,
启动命令:cmd里输入jconsole(配置好JDK环境变量的前提下)
JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,不过此JVM需要使用可管理的模式启动,我们可以直接在命令行cmd里面启动,它主要监控内存,类,线程和VM信息,界面如下:
2,jvisualvm工具,
在cmd里输入jvisualvm命令启动。
VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带(java启动时不需要特定参数,监控工具在bin/jvisualvm.exe),能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。
在JDK_HOME/bin(默认是C:\Program Files\Java\jdk1.6.0_13\bin)目录下面,有一个jvisualvm.exe文件,双击打开,从UI上来看,这个软件是基于NetBeans开发的了。
截图如下:
相关推荐
《深入理解Java虚拟机》是一本深度探讨Java虚拟机(JVM)的著作,涵盖了JVM性能调优、内存模型以及虚拟机原理等多个关键领域。本文将基于这些主题,详细阐述其中的重要知识点。 首先,我们要了解Java虚拟机(JVM)...
10. **性能优化**:通过分析JVM的各种监控工具(如JConsole、VisualVM等),学习如何定位性能瓶颈并进行调优,包括堆大小调整、垃圾收集器选择、JVM参数设置等。 通过阅读这本书,开发者不仅能理解JVM的基本运作...
总结来说,基于Java虚拟机内存模型的性能调优涉及到多个层面,包括理解内存结构、垃圾回收机制、内存分配策略、调优工具的使用以及JVM参数的设置。通过深入理解和实践这些知识,开发者能够有效地优化Java应用程序,...
6. **监控工具**: 使用JConsole、VisualVM等工具实时监控JVM状态,及时发现潜在问题。 通过以上介绍,我们不仅深入了解了Java虚拟机的基础知识,还学习到了如何对其进行优化和调整以提高应用程序性能。希望这些知识...
Java虚拟机(JVM)是Java程序运行的基础,它的调优对于提高应用程序的性能至关重要,尤其是在高并发、大数据量的场景下。Tomcat作为流行的Java应用服务器,其性能优化也与JVM设置紧密相关。本篇文章将深入探讨JVM...
**JVM监控工具** 1. **JConsole**:这是Java SDK自带的一个图形化监控工具,可以查看JVM的内存使用情况、线程状态、类加载情况等。 2. **VisualVM**:功能更为强大的多合一JVM分析工具,提供CPU和内存分析、线程...
4. **性能监控与调优工具**:如JConsole、VisualVM等,这些工具可以帮助开发者实时监控JVM状态,分析CPU、内存、线程等资源的使用情况,从而发现潜在的问题。 5. **异常诊断**:书中会介绍如何通过日志、堆转储...
4. **性能监控与调优工具**:JDK自带的一些工具,如jconsole、jvisualvm、jmap、jstack等,是JVM性能分析的重要辅助。书中可能详细讲解了这些工具的使用方法和分析技巧。 5. **JVM参数设置**:了解并合理设置JVM...
《实战JAVA虚拟机 (JVM故障诊断与性能优化)》是一本深度剖析JVM的实践指南,旨在帮助读者掌握JVM的内部工作机制,提升故障排查和性能调优的能力。本书可与周志明的《深入理解JAVA虚拟机》相媲美,提供了丰富的源码...
本资源"Java虚拟机内存测试和参数调优代码.zip"显然是一个专注于Java开发者如何理解和优化JVM内存配置的实践教程。在Java应用开发中,理解和调优JVM内存设置至关重要,因为它直接影响程序性能、稳定性以及内存使用...
在深入讨论JVM(Java虚拟机)调优之前,我们有必要先了解一下虚拟机的基本概念和堆栈的区分。Java程序在运行时,所有的数据都存储在JVM的内存模型中。在内存模型中,有两大重要区域,即堆(Heap)和栈(Stack)。堆主要...
在《实战Java虚拟机——JVM故障诊断与性能优化》一书中,作者深入探讨了如何对JVM进行故障排查和性能调优,通过源码分析来帮助读者理解其内部工作原理。下面我们将根据书中的主题,详细阐述相关的知识点。 1. **JVM...
Java虚拟机(JVM)调优是提升Java应用程序性能的关键环节,主要涉及到内存管理、垃圾收集(GC)、线程调度等多个方面。JVM调优的目标是优化程序运行效率,减少不必要的系统资源消耗,特别是减少全GC(Full GC)的...
Java虚拟机(JVM)性能参数调优是提升Java应用程序性能的关键步骤,尤其是在大型系统和企业级应用中。本文档旨在提供一个详细的指导,帮助开发者理解JVM的运行机制,并有效地调整相关参数以优化系统性能。 1. **...
IBM Thread and Monitor Dump Analyzer for Java专业JVM调优工具 一、使用方法 1.使用java -jar启动程序 2.找到需要分析的jvm进程 3.使用jstack [pid] > /tmp/sdapjvmlog.txt导出进程的详细日志 4.使用程序打开...
《实战JAVA虚拟机 JVM故障诊断与性能优化》这本书主要涵盖了Java开发者在实际工作中可能遇到的JVM相关问题,包括但不限于故障排查、性能调优、内存管理、垃圾收集机制等内容。以下将详细介绍这些知识点: 1. **Java...
标题中提到了JVM原理、JVM调优、JVM内存模型和JAVA并发,这些都是Java虚拟机(JVM)相关的核心概念。JVM是运行Java字节码的虚拟计算机,为Java提供了一个跨平台的环境,确保Java程序可以在不同的操作系统上运行而...
在当前IT技术发展的浪潮中,Java虚拟机(JVM)作为应用最广泛的平台之一,其性能调优显得尤为重要。Java程序因其跨平台特性,在各类软硬件环境中得以广泛运用。然而,伴随着业务量的增大和高并发运行的需求,Java...
《Java虚拟机:JVM高级特性与最佳实践(第2版)》这本书深入探讨了Java虚拟机(JVM)的工作机制,旨在帮助开发者们更好地理解Java程序的运行过程,优化性能,并解决潜在的问题。作者周志明是Java领域的资深专家,他...
"深入Java虚拟机"这本书可能涵盖了JVM的更深入细节,如类加载机制的自定义、内存模型、垃圾收集器的原理与调优、JVM参数设置、性能监控工具的使用等。通过学习这些内容,开发者可以更好地理解和优化Java应用的运行...