第七章 JVM性能监控与故障处理工具(1)

1、定位系统问题

  • 依据

    • GC日志
    • 堆转储快照(heapdump/hprof文件)
    • 线程快照(threaddump/javacore文件)
    • 运行日志
    • 异常堆栈
  • 分析依据的工具
    • jps:显示指定系统内的所有JVM进程
    • jstat:收集JVM各方面的运行数据
    • jinfo:显示JVM配置信息
    • jmap:形成堆转储快照(heapdump文件)
    • jhat:分析heapdump文件
    • jstack:显示JVM的线程快照
    • jconsole
    • visualVM

说明:后边两种是具有图形化界面的。

2、jps(是其他所有命令的基础)

作用:列出所有的JVM虚拟机进程。

格式:jps -l

3、jstat(是没有GUI界面的情况下,在运行期定位JVM性能问题的首选)

作用:查看gc数据和类加载卸载数据

格式:jstat option PID interval count

意义:每隔interval毫秒做一次option,一共做count次

说明:S0(from区)使用了41.74%;S1(to区)使用了0;E(Eden区)使用了54.35%;O(Old,年老代)使用了62.41%;P(Perment,永久代)使用了99.63%;YGC(Young GC)了32次,YGCT(Young GC Time)花销0.132秒;FGC(Full GC)了1次,FGCT(Full GC Time)花销0.102秒;GCT(GC Time)总花销0.234秒。

分析:其实上边这个查询结果可以直接看出,我们需要加大P(永久代大小)

说明:加载了3683个类,总共占有4355.3字节;卸载了0个类,卸载的类的字节数为0,类的加载与卸载共花销3.16秒

更多的jstat的使用,参看http://my.oschina.net/skyline520/blog/304805

4、jinfo

作用:查看和运行期修改JVM的配置参数

格式:jinfo -flag parameter PID

说明:查看3732进程下的MaxTenuringThreshold参数值。

说明:修改3732进程下的MaxTenuringThreshold参数值,但是windows下失败。

5、jmap

作用:生成堆转储快照和查看最占内存的元素,用于分析内存泄露问题

格式(生成堆转储快照):jmap -dump:format=b,file=文件名 PID

说明:生成了3732进程的堆转储文件myfile

格式(查看最占内存的元素):jmap -histo PID

说明:结果自己去看,太多了

6、jhat

作用:分析堆转储快照(与jmap配合)

格式:jhat 文件名

说明:执行上述命令后,打开localhost:7000,找到如下红框部分打开,这里才是我们最关注的东西。

注意:该工具是万不得已才用的。

推出命令使用"ctrl+c"

7、jstack

作用:生成线程快照,定位线程长时间卡顿的原因(线程间死锁、死循环、请求外部资源导致的长时间等待)

格式:jstack -l PID

说明:查看3732进程中的所有线程的堆栈信息

《深入理解Java虚拟机》的作者提供了一个工具jsp页面,使得我们可以在程序运行时,随时运行该jsp页面,来查看线程堆栈信息,代码如下:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8" import="java.util.Map"%>
 3 <!DOCTYPE html>
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>jstack</title>
 8 </head>
 9 <body>
10 <%
11     for(Map.Entry<Thread, StackTraceElement[]> stackTrace : Thread.getAllStackTraces().entrySet()){
12         Thread thread = (Thread)stackTrace.getKey();
13         StackTraceElement[] elements = (StackTraceElement[])stackTrace.getValue();
14
15         /* if(thread.equals(Thread.currentThread())){
16             continue;
17         } */
18         out.println("\n线程:"+thread.getName()+"\n");
19         for(StackTraceElement ele : elements){
20             out.println("\t"+ele+"\n");
21         }
22     }
23 %>
24 </body>
25 </html>

注意:代码中我注释掉一段,是因为想也查出当前线程的堆栈信息,作者并没有这个注释。

总结:

  • JVM性能相关的6个常用的JDK命令

    • jps:查询JVM中的所有进程,找出将要操作的PID,是所有命令的基础
    • jstat:查看相应JVM进程的gc、类加载卸载信息,是没有GUI界面查看JVM运行数据的首选
    • jinfo:查看和在运行期动态修改JVM配置参数
    • jmap:生成堆转储快照和比较占内存的对象
    • jhat:配合jmap分析堆转储日志,除非没有其他工具可做这个事儿,否则就不用该工具
    • jstack:生成线程快照,定位线程长时间卡顿的原因(线程间死锁、死循环、请求外部资源导致的长时间等待)
  • 输出gc信息到控制台
    • -XX:+PrintGCDetails:输出GC的详细信息
    • -XX:+PrintGCTimeStamps:输出GC的时间信息
    • -XX:+PrintGCApplicatonStoppedTime:GC造成的应用暂停的时间
  • 输出gc信息到文件

    • 以上三个参数在这里依旧适用
    • -Xloggc:文件路径/gc.log:输出到文件
时间: 2024-10-11 03:45:03

第七章 JVM性能监控与故障处理工具(1)的相关文章

第八章 JVM性能监控与故障处理工具(2)

注意:该篇博客主要记录自<深入理解java虚拟机(第二版)> 说明:关于命令行的JVM性能监控与故障处理工具见<第七章 JVM性能监控与故障处理工具(1)> 1.图像化的故障处理工具 Jconsole visualVM 2.Jconsole 进入"E:\Java\jdk1.6\bin",双击"jconsole.exe",弹出如下框: 说明:这里列出了所有的JVM进程,一个Jconsole进程,一个eclipse(PID:4684),这相当于j

【008】【JVM——性能监控与故障处理工具】

 JVM--性能监控与故障处理工具 HotSpot虚拟机提供了许多虚拟机运行时调试工具,方便开发人员在应用运行时对虚拟机和应用性能进行监控和优化. jps:JVM Process Status Tool 显示指定系统内所有的HotSpot 虚拟机进程.并显示虚拟机执行主类(Main Class, main()函数所在的类)的名称,以及这些进程的本地虚拟机的唯一ID ( LVMID, Local Virtual Machine Identifier) . jps 命令格式:jps [ opti

JVM性能监控与故障处理工具

jdk为我们提供了一系列的jvm性能监控和故障处理工具,在这里根据学习进度进行整理记录.便于之后查阅 1.jps 虚拟机进程工具  类似于Linux系统中的ps命令,用于查看虚拟机进程,常用的有以下功能 jps -l    显示虚拟机进程id以及进程主类 jps -q  只显示进程id,不显示主类名称 jps -m  显示进程id以及传递给main的参数 jps -v 输出虚拟机进程启动时的jvm参数 2.jstat 虚拟机统计信息监视工具 该工具是用于监视虚拟机各种运行状态信息的命令行工具  

第4章 虚拟机性能监控与故障处理工具

4.1 JDK的命令行工具 4.1.1 jps:虚拟机进程状况工具 4.1.2 jstat:虚拟机统计信息监视工具 4.1.3 jinfo:Java配置信息工具 4.1.4 jmap:Java内存映射工具 4.1.5 jhat:虚拟机堆转储快照分析工具 4.1.6 jstack:Java堆栈跟踪工具 4.1.7 HSDIS:JIT生成代码反汇编

JVM(4) 虚拟机性能监控与故障处理工具

1. Sun JDK 监控和故障处理工具 1)jps:JVM process Status Tool,显示指定系统内所有的HotSpot虚拟机进程.可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类) 的名称,以及这些进程的本地虚拟机的唯一ID 2)jstat:JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据.是用于监视虚拟机各种运行状态信息的命令行工具.它可以显示本地或远程(需要远程 主机

《深入理解Java虚拟机》虚拟机性能监控与故障处理工具

上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念,才能继续往下学习. 本节学习重点 本节主要是针对JVM内存管理机制的一些监控手段,例如堆情况使用的监控,线程栈情况的监控等.有几句废话还是有必要在这里强调的,工具是人类思维的工具,例如Java语言是人类满足需求的一种技术手段,而监控工具只是维护程序应用的一种手段.所以,思考的逻辑思维要清晰,是问题引导工具,

004 虚拟机性能监控与故障处理工具

工具位于 JDK下bin中 1.JDK的命令行工具 监控和故障处理工具 ① jps:虚拟机进程状况工具 jsp命令格式: jps[options][hostid] jps可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名.jps的其他常用选项见下表. ② jstat:虚拟机统计信息监视工具 jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具.它可以显示本地或者远程虚拟机进程中的类

虚拟机性能监控与故障处理工具

Sun SDK 监控和故障处理工具 jps 虚拟机进程状况工具 格式 jps [option] [hostid] 本地虚拟机唯一ID: local virtual machine identifier,LVMID 进程ID:process identifier jps可以通过RMI 协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI 注册表中的注册的主机名. 主要参数 -q                                                      

【JVM.3】虚拟机性能监控与故障处理工具

一.概述 经过前面两章对于虚拟机内存分配与回收技术各方面的介绍,相信读者已经建立了一套比较完整的理论基础.理论总是作为指导实践的工具,能把这些执行应用到实际工作中才是我们的最终目的.接下来我们会从实践的角度去了解虚拟机内存管理的世界. 二.JDK的命令行工具 Java开发人员肯定都知道JDK的bin目录中的"java.exe"."javac.exe"这两个命令行工具,对并非所有程序员都了解JDK的bin目录之中其他命令行程序的作用.每逢JDK更新版本时,bin目录下