微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jvm的传唱-常用调试指令

jps

10544 sun.tools.jps.Jps -Dapplication.home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.aarch64 -xms8m
1508 org.tanukisoftware.wrapper.WrapperSimpleApp -Dorg.tanukisoftware.wrapper.WrapperSimpleApp.maxStartMainWait=40 -Djava.library.path=../lib -Dwrapper.key=qqgJybRXHKr1Zc_g -Dwrapper.backend=pipe -Dwrapper.disable_console_input=TRUE -Dwrapper.pid=1318 -Dwrapper.version=3.5.35 -Dwrapper.native_library=wrapper -Dwrapper.arch=arm -Dwrapper.service=TRUE -Dwrapper.cpu.timeout=10 -Dwrapper.jvmid=1
1239 q-support.jar -xms3g -Xmx3g -Xmn1g
9739 1.1.5.210520_release_s_app_004.jar -xms8g -Xmx8g -Xmn1g
9595 1.1.5.210722_release_s_app_022.jar
3724 1.1.5.210712_release_s_app_009.jar

 

 

 

 

 jinfo

  • no options 输出所有的系统属性和参数
  • -flag 打印指定名称的参数
  • -flag [+|-] 打开或关闭参数
  • -flag = 设置参数
  • -flags 打印所有参数 
  • -sysprops 打印系统配置 

 

# jinfo -flags 1239
Attaching to process ID 1239, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.232-b09
Non-default VM flags: -XX:CICompilerCount=4 -XX:InitialHeapSize=3221225472 -XX:MaxHeapSize=3221225472 -XX:MaxNewSize=1073741824 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=1073741824 -XX:OldSize=2147483648 -XX:+UseCompressedClasspointers -XX:+UseCompressedOops -XX:+UseParallelGC 
Command line:  -xms3g -Xmx3g -Xmn1g

打开  GC日志 jinfo -flag +PrintGCDetails 1239

关闭  GC日志 jinfo -flag -PrintGCDetails 1239

 

-xms:初始堆大小,认为物理内存的1/64(<1GB);认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增 大堆直到-Xmx的最大限制
-Xmx:最大堆大小,认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -xms的最小限制
-Xmn:新生代的内存空间大小,注意:此处的大小是(eden+ 2 survivor space)。与jmap -heap中显示的New gen是不同 的。整个堆大小=新生代大小 + 老生代大小 + 永久代大小。 在保证堆大小不变的情况下,增大新生代后,将会减小老生代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-XX:SurvivorRatio:新生代中Eden区域与Survivor区域的容量比值,认值为8。两个Survivor区与一个Eden区的比值为 2:8,一个Survivor区占整个年轻代的1/10。
-Xss:每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。应根据应用的线程所需内存大小 进行适当调整。在相同物理内存下, 减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。一般 小的应用, 如果栈不是很深, 应该是128k够用的, 大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。和threadstacksize选项解释很类似,官方文档似乎没有 解释, 在论坛中有这样一句话:"-Xss ``is translated ``in a VM flag named ThreadStackSize”一般设置这个值就可以了。
-XX:PermSize:设置永久代(perm gen)初始值。认值为物理内存的1/64。
-XX:MaxPermSize:设置持久代最大值。物理内存的1/4。

 

jstat

-class class loader的行为统计
jinfo -flag -PrintGC 11666 jinfo -flag -PrintGCDetails 11666
-compiler HotSpt JIT编译器行为统计
-gc 垃圾回收堆的行为统计
-gccapacity 各个垃圾回收代容量(young,old,perm)和他们相应的空间统计
-gcutil 垃圾回收统计概述
-gccause 垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因
-gcnew 新生代行为统计
-gcnewcapacity 新生代与其相应的内存空间的统计
-gcold 年老代和永生代行为统计
-gcoldcapacity 年老代行为统计
-printcompilation HotSpot编译方法统计
  每隔1000毫秒打印一次,打印3次
# jstat -gcutil 1239 1000 3
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
 55.95   0.00  24.48   1.61  95.97  93.67      6    0.132     3    0.250    0.382
 55.95   0.00  24.48   1.61  95.97  93.67      6    0.132     3    0.250    0.382
 55.95   0.00  24.48   1.61  95.97  93.67      6    0.132     3    0.250    0.382

==========================================================分割线====================================================================
S0 survivor0使用百分比

S1 survivor1使用百分比

E Eden区使用百分比

O 老年代使用百分比

M 元数据区使用百分比

CCS 压缩使用百分比

YGC 年轻代垃圾回收次数

YGCT 年轻代垃圾回收消耗时间

FGC Full GC垃圾回收次数

FGCT Full GC垃圾回收消耗时间

GCT 垃圾回收消耗总时间 
 

jstack

   jstack是用来查看JVM线程快照的命令,线程快照是当前JVM线程正在执行的方法堆栈集合。使用jstack命令可以定位线程出现长时间卡顿的原因,例如死锁,死循环等。

-F 当使用jstack 无响应时,强制输出线程堆栈。

-m 同时输出java堆栈和c/c++堆栈信息(混合模式)

-l 除了输出堆栈信息外,还显示关于锁的附加信息
 
 
 

jmap

jmap可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及finalizer 队列

-heap 打印java heap摘要

-histo[:live] 打印堆中的java对象统计信息

-clstats 打印类加载器统计信息

-finalizerinfo 打印在f-queue中等待执行finalizer方法的对象

-dump: 生成java堆的dump文件

dump-options:

live 只转储存活的对象,如果没有指定则转储所有对象

format=b 二进制格式

file= 转储文件
 
这个命令是要把java堆中的存活对象信息转储到dump.bin文件

# jmap -dump:live,format=b,file=dump.bin 1239
Dumping heap to /root/dump.bin ...
Heap dump file created

 
jhat 
  jhat是用来分析jmap生成dump文件的命令,jhat内置了应用服务器,可以通过网页查看dump文件分析结果,jhat一般是用在离线分析上。
-stack false: 关闭对象分配调用堆栈的跟踪

-refs false: 关闭对象引用的跟踪

-port : HTTP服务器端口,认是7000

-debug : debug级别

-version 分析报告版本
 

jhat /root/dump.bin
Reading from /root/dump.bin...
Dump file created Fri Jul 23 16:20:40 CST 2021
Snapshot read, resolving...
Resolving 598579 objects...
Chasing references, expect 119 dots.......................................................................................................................
Eliminating duplicate references.......................................................................................................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐