`

Java虚拟机之JVM工具监控调优

阅读更多

转自我是攻城师(woshigcs)

前几篇我 们学习了,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,比较常用的监控命令:

Java代码  收藏代码
  1. [search@fsedump00yw ~]$ jstat -gcutil 7829   
  2.   S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT     
  3.   0.02   0.00 100.00  96.31  99.94   6504   53.595     9   12.097   65.692  
  4. [search@fsedump00yw ~]$ jstat -gcutil 7829   
  5.   S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT     
  6.   0.00   0.09   6.05  96.31  99.94   6505   53.598     9   12.097   65.696  
  7. [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虚拟机JVM调优必备工具

    IBM Thread and Monitor Dump Analyzer for Java专业JVM调优工具 一、使用方法 1.使用java -jar启动程序 2.找到需要分析的jvm进程 3.使用jstack [pid] > /tmp/sdapjvmlog.txt导出进程的详细日志 4.使用程序打开...

    深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程

    第5节jvm再体验-jvm可视化监控工具 [免费观看] 00:21:17分钟 | 第6节杂谈 [免费观看] 00:12:37分钟 | 第7节Java的发展历史00:27:24分钟 | 第8节Java的发展历史续00:02:27分钟 | 第9节Java技术体系00:08:46分钟 |...

    jvm原理与调优

    该文档是关于java虚拟机的原理,描述及调优视频,其中,详细讲述了jvm的运行机制,类装载器,GC算法,性能监控工具,堆,锁等内容。

    JVM故障诊断与性能优化(实战JAVA虚拟机).7z

    本书将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。 本书共11章。第1~3章介绍了Java虚拟机的定义、总体架构、常用配置参数。第4~5章介绍了垃圾回收的算法和各种垃圾回收器。...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    第2章 Java内存区域与内存溢出异常 / 24 2.1 概述 / 24 2.2 运行时数据区域 / 25 2.2.1 程序计数器 / 25 2.2.2 Java虚拟机栈 / 26 2.2.3 本地方法栈 / 27 2.2.4 Java堆 / 27 2.2.5 方法区 / 28 2.2.6 运行...

    JVM参数调优及Java测试代码

    JVM参数调优及Java测试代码,通过调整虚拟机各种参数并进行测试和监控得到最优配置

    JVM体系结构与GC调优

    JVM体系结构与GC调优相关介绍,包含JVM体系结构、常用GC算法、内存管理、垃圾回收器、虚拟机调优、相关监控工具等

    java虚拟机知识点整理

    自己看书整理的 java虚拟机精品知识点 java内存区域与内存溢出处理 虚拟机栈和本地方法栈区别 对象定位访问 垃圾收集器GC管理 虚拟机GC垃圾回收收集算法(内存回收方法论) 虚拟机GC垃圾回收收集器(内存回收具体实现...

    Java虚拟机

    这本书的内容是帮你全面了解java虚拟机,本书第1版两年内印刷近10次,98%以上的评论全部为5星级的好评,是整个Java图书领域公认的经典著作和超级畅销书,繁体版在台湾也十分受欢迎。第2版在第1版的基础上做了很大的...

    详细讲解了jvm在java中应用

    主要包含:JVM概述,内存结构讲解,对象实例化,垃圾回收,类的加载,程序编译,代码的优化,性能监控与调优. JVM:全称 Java Virtual Machine,一个虚拟计算机,Java 程序的运行环境(Java二进制字节码的运行环境) 特点:...

    JVM监控管理及故障诊断工具(常用命令)

    JVM监控管理及故障诊断工具(常用命令),文中的命令常用于监视JVM虚拟机性能及资源消耗情况。

    Java高级工程师简历模板18k+

    3.对Java虚拟机、JMM、垃圾收集机制、GC算法、JVM常用配置参数、GC参数、classLoader、锁机制、JVM故障分析,jmap,jstack等jdk提供的工具命令,性能监控工具(java visualVM),JVM参数调优有一定了解; 4.熟悉java...

    深入理解JVM内存结构及运行原理全套视频加资料.txt

     第5讲 jvm再体验-jvm可视化监控工具 免费 00:21:17  第6讲 杂谈 免费 00:12:37  第7讲 Java的发展历史 00:27:24  第8讲 Java的发展历史续 00:02:27  第9讲 Java技术体系 00:08:46  第10讲 jdk8的新特性...

    深入JVM内核 - 原理、诊断与优化

    目前,Java是最为流行的编程语言之一,它的基础平台就是JVM。除了Java,如JRuby、Scala、Clojure等语言也运行在JVM平台。熟悉和掌握JVM平台有着重要的实用价值和意义。 在本课程中个,将详细介绍JVM的基本原理、...

    java7rt.jar源码-Java_JVM:这是我的JavaJVM学习笔记

    三:下篇——性能监控与调优篇 一: 上篇——内存与垃圾回收器 架构: jvm依赖的架构: 栈架构/寄存器架构 栈架构 JVM的生命周期: 1.启动 通过引导类加载器(Bootstrap class loader)创建一个初始类(Initial Class)来...

    Java程序性能优化

    《Java程序性能优化:让你的Java程序更快、更稳定》共6章,先后从软件设计、软件编码、JVM调优以及程序故障排除等方面介绍针对Java程序的优化方法。第1章介绍性能的基本概念、定律、系统调优的过程和注意事项;第2章...

    大话JAVA性能优化.pdf

    作者力求做到知识的综合传播,而不是仅仅只针对Java虚拟机调优进行讲解,另外力求每一章节都有实际的案例支撑。具体包括:性能优化策略、程序编写及硬件服务器的基础知识、Java API优化建议、算法类程序的优化建议、...

    大话JAVA性能优化PDF

    作者力求做到知识的综合传播,而不是仅仅只针对Java虚拟机调优进行讲解,另外力求每一章节都有实际的案例支撑。具体包括:性能优化策略、程序编写及硬件服务器的基础知识、Java API优化建议、算法类程序的优化建议、...

    java程序性能优化

    第5章立足于JVM虚拟机层面,介绍如何通过设置合理的JVM参数提升Java程序的性能。第6章为工具篇,介绍了获取和监控程序或系统性能指标的各种工具,包括相关的故障排查工具。, 本书适合所有Java程序员、软件设计师、...

Global site tag (gtag.js) - Google Analytics