《深入理解JVM》笔记 第4、5章 调优工具与案例

定位问题,知识、经验是关键,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件)等

一、工具

1. JDK命令行工具(大多是jdk/lib/tols.jar的封装)

【1】jps:显示系统内所有HotSpot虚拟机进程

在一台hadoop服务器(jdk1.8)上执行试试看,可以看到3个进程在运行

 

【2】jstat:监视虚拟机各种运行状态信息

选一个刚才jps显示的进程号,比如26437

执行jstat -gc 26437 250,表示250ms查询一次进程26437 垃圾收集情况。

 

执行jstat -gcuti 26437,显示已使用空间占总空间百分比

S0、S1 表示Survivor0、Survivor1

E表示Eden,O表示Old,M表示Metaspace,CCS 压缩类空间 (Metaspace的一部分),YGC 年轻代GC总次数 ,YGCT 年轻代GC总时间

jstat工具主要选项:

-class (类加载器)
-compiler (JIT)
-gc (GC堆状态)
-gccapacity (各区大小)
-gccause (最近一次GC统计和原因)
-gcnew (新区统计)
-gcnewcapacity (新区大小)
-gcold (老区统计)
-gcoldcapacity (老区大小)
-gcpermcapacity (永久区大小)
-gcutil (GC统计汇总)
-printcompilation (HotSpot编译统计)

【3】jinfo:显示虚拟机配置信息

jinfo -flag xxx 26437 

 

 此处验证了在jdk1.8中,默认所有对象优先在Eden分配,默认年龄为15的对象进入老年代。

【4】jmap:生成虚拟机的内存转储快照(heapdump)

除了jmap获取dump文件,还有几种方式:

  • 通过-XX:+HeapDumpOnOutOfMemoryError参数,让虚拟机在OOM后自动生成dump文件
  • 通过-XX:+HeapDumpOnCtrlBreak参数,使用【Ctrl】+【Break】键让虚拟机生成dump文件
  • Linux下通过Kill -3命令发送进程退出信号“吓唬”一下虚拟机,也能拿到dump文件

jmap工具主要选项:

-dump(生成dump文件)

-finalizerinfo(F-Queue中等待的对象)

-heap(java堆详细信息)

-histo(堆中对象统计信息)

-F(强制生成快照)

【5】jhat:用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果

【6】jstack:用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)

主要目的是定位线程出现长时间停顿的原因,如线程死锁、死循环、请求外部资源时间长。

 

2. JDK可视化工具

1. JConsole(基于JMX) Java监视与管理控制平台

2. VisualVM 多和一故障处理工具

二、调优案例

以后再写。

 

posted @ 2022-03-23 10:32  方山客  阅读(38)  评论(0编辑  收藏  举报