jvm的传唱-常用调试指令
jps
-
-l : 显示进程id,显示主类全名或jar路径
-
-q : 显示进程id
-
-m : 显示进程id, 显示JVM启动时传递给main()的参数
-
-v : 显示进程id,显示JVM启动时显示指定的JVM参书
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.