首页 > 其他分享 >JDK内置工具使用总结

JDK内置工具使用总结

时间:2022-12-04 15:24:52浏览次数:34  
标签:总结 内置 JDK 查看 回收 线程 垃圾 大小 jstat

目录

以下使用的是jdk11

jinfo 查看或修改jvm的参数、属性

使用示例:

jinfo 23167		# 打印 VM flags and system properties
jinfo -flags 23167	 # 打印 VM flags
jinfo -sysprops 23167	# 打印 system properties
jinfo -flag MetaspaceSize 23167	# 打印指定的vm参数值
jinfo -flag [+|-]<name> 23167	# 增加、减少vm参数
jinfo -flag <name>=<value>	# 设置vm的值

jstack 查看线程堆栈

查看线程堆栈:jstack -l -e PID,-l表示显示锁信息,-e表示显示额外的信息(allocated、defined_classes)

一般将结果输出到一个文件里,分析文件

...

  • 第一部分是jvm的信息,堆栈快照的时间、虚拟机版本模式等信息
  • 第二部分是jvm内部线程信息(SMR为Safe Memory Reclamation安全内存分配),这里的elements与下面的各个堆栈信息的tid对应,堆栈中的nid与外部操作系统查看到的线程id对应
  • 第三部分是线程的具体信息,依次为:
    • 线程名称
    • 线程id,demon表示是守护线程
    • 线程的优先级
    • 操作系统中线程的优先级
    • cpu,线程获取到的cpu总时间
    • elaspsed,线程启动后经过的时间
    • allocated,线程分配的字节数
    • defined_classes,本线程定义的class个数(要开启 -XX:+PrintExtendedThreadInfo才会输出数据)
    • tid,线程id,与SMR中elements中的值对应
    • nid,操作系统中线程id,这里显示的都是十六进制的
    • 线程的状态,waiting on condition
    • 下面就是线程具体的堆栈了
    • Locked ownable synchronizers:表示线程可用的用于同步的排它锁对象,Ownable Synchronizer是一个同步器,这个同步器的同步属性是通过使用AbstractOwnableSynchronizer或者它的子类来实现的,如ReentrantLock和ReentrantReadWriteLock中的write-lock
  • 第四部分是JVM的线程信息
  • 最后一部分是JNI(Java Native Interface)引用的信息,注意这些引用可能会导致内存泄露,因为这些native的引用并不会被自动垃圾回收

排除线程cpu过高

可用通过top -p PID -H查出线程高的id,转换成16进制,在jstack中根据nid找到该线程的堆栈进行分析可能导致cpu过高的代码

排除死锁

分析jstack里面是否有DeadLock关键字

jmap dump堆到文件

一般在oom时将堆提前dump下来,或开启oom dump-XX:+HeapDumpOnOutOfMemoryError,分析哪些对象占用内存
jmap -dump:live,format=b,file=./t.bin PID

jhsdb

有很多子选项,增加对应的选项后可以查看具体命令帮助

查看jvm堆状态

jhsdb jmap --heap --pid PID

jstat 查看gc情况

基本使用方法为:jstat -选项 -h 5 -t PID 刷新间隔 刷新次数,如jstat -gcutil -t 8048 1s 5
-h 5表示每5行显示一次头部栏,-t表示显示运行的时间戳

jstat -option 可以查看可选的所有选项:

-class 查看类加载统计

  • 时间戳
  • Loaded,加载的class数量
  • Bytes,所占空间大小
  • Unloaded,未加载数量
  • Bytes,未加载所占空间大小
  • Time,加载使用的时间

-compiler 查看编译统计

  • Compiled:编译数量
  • Failed:失败数量
  • Invalid:不可用数量
  • Time:时间
  • FailedType:失败类型
  • FailedMethod:失败的方法

-gc 查看垃圾回收统计

  • S0C:第一个幸存区的大小
  • S1C:第二个幸存区的大小
  • S0U:第一个幸存区的使用大小
  • S1U:第二个幸存区的使用大小
  • EC:伊甸园区的大小
  • EU:伊甸园区的使用大小
  • OC:老年代大小
  • OU:老年代使用大小
  • MC:方法区大小
  • MU:方法区使用大小
  • CCSC:压缩类空间大小
  • CCSU:压缩类空间使用大小
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收消耗时间
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

-gccapacity 查看堆内存统计

  • NGCMN:新生代最小容量
  • NGCMX:新生代最大容量
  • NGC:当前新生代容量
  • S0C:第一个幸存区大小
  • S1C:第二个幸存区的大小
  • EC:伊甸园区的大小
  • OGCMN:老年代最小容量
  • OGCMX:老年代最大容量
  • OGC:当前老年代大小
  • OC:当前老年代大小
  • MCMN:最小元数据容量
  • MCMX:最大元数据容量
  • MC:当前元数据空间大小
  • CCSMN:最小压缩类空间大小
  • CCSMX:最大压缩类空间大小
  • CCSC:当前压缩类空间大小
  • YGC:年轻代gc次数
  • FGC:老年代GC次数

-gccause 查看gc原因

jstat -gccause -t 8048 1s 5

元空间内存统计,新生代、老年代内存及垃圾回收统计

jstat -gcmetacapacity -t 8048 1s 5
jstat -gcnew -t 8048 1s 5
jstat -gcnewcapacity -t 8048 1s 5
jstat -gcold -t 8048 1s 5
jstat -gcoldcapacity -t 8048 1s 5

-gcutil 垃圾回收总结统计

  • S0:幸存1区当前使用比例
  • S1:幸存2区当前使用比例
  • E:伊甸园区使用比例
  • O:老年代使用比例
  • M:元数据区使用比例
  • CCS:压缩使用比例
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收时间,从启动到当前时间,单位s
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间,从启动到当前时间,单位s
  • CGC:压缩类空间垃圾回收次数
  • CGCT:压缩类空间垃圾回收总时间
  • GCT:垃圾回收消耗总时间,从启动到当前时间,单位s

-printcompilation 查看jvm编译方法统计

  • Compiled:最近编译方法的数量
  • Size:最近编译方法的字节码数量
  • Type:最近编译方法的编译类型
  • Method:方法名标识

jhat web查看工具

jvisualvm可视化工具

总结

  • 查看堆栈:jstack -l -e PID
  • 查看堆内存:jhsdb jmap --heap --pid PID
  • dump堆:jmap -dump:live,format=b,file=./t.bin PID

标签:总结,内置,JDK,查看,回收,线程,垃圾,大小,jstat
From: https://www.cnblogs.com/bingmous/p/15787521.html

相关文章

  • 2022-2023-1 20221306《计算机基础与程序设计》第十四周学习总结
    作业信息班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求: https://www.cnblogs.com/rocedu/p/9577842.html#WEEK14作业目标:《C语言程序设计》第......
  • 《wireshark网络分析就这么简单》总结
     《从一到面试题开始说起》、《小试牛刀:一个简单的应用实例》、《excel文件的保存过程》、《你一定会喜欢的技巧》(tcpdump抓包技巧)、《NFS协议的解析》==============......
  • 2022-2023-1 20221325 《计算机基础与程序设计》第十四周学习总结
    作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEE......
  • Ubuntu server 20.04安装JDK8.0
    ##一、JDK下载点击此链接直达下载[JDK下载](https://www.oracle.com/java/technologies/downloads/#java8)选择Java8以及下面的Linux,选择tar安装包,登入ORACLE用户点击下......
  • Linux 安装Openjdk
    1.下载地址:https://adoptium.net/zh-CN/temurin/releases/?version=8选择Linux平台命令行界面的找到下载地址使用wget或者curl进行下载【下载地址可能需要使用加速】......
  • 11.28-12.2周末总结
    目录MySQL数据库一、多表查询1.方式一:连表查询2.方式二:子查询二、python操作数据库1.python操作数据库的基本操作2.pymysql的中方法三、MySQL中的理论1.sql注入问题(1)现象一......
  • 2022-2023-1 20221330《计算机基础和程序设计》第十四周学习总结
    这个作业属于那个班级 https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK14作业目标学习《C语言程......
  • java 生成 PDF 总结(1)
    如何用java生成PDF 文档,运行环境在linux上。自己在网上找了好多资料,总结下来做个分享。后面也会建立几个demo供大家参考。主要分为以下几个部分:1. 概述2. itext......
  • 【博学谷学习记录】超强总结,用心分享|Java基础分享-进程间通信方式
    目录1.管道2.消息队列3.共享内存4.信号量5.信号6.Socket 1.管道如果你学过Linux命令,那你肯定很熟悉「|」这个竖线。$ ps auxf | grep mysql上面命令行......
  • java 生成word/docx 总结(1)
    最近有个任务,需要用java生成WORD文档,运行环境在linux上。于是,自己在网上找了好多资料,总结下来做个分享。后面也会对常用的几个建立几个demo供大家参考。主要分为以下几个......