1. 前言
我的开源剖析工具小笔记。
2. JDK原生的工具
2.1 jinfo
JDK提供的一个能够实时查看Java虚拟机各种配置参数和零碎属性的命令行工具。
常见应用场景:
- 查看JVM默认配置参数;
- 查看批改的配置参数是否失效;
- 其余;
- 用法:jinfo [参数] <pid>
参数 | 作用 | 示例 |
---|---|---|
-flag <name> | 打印指定名称对应的配置参数 | jinfo -flag PrintGC 123 (查看PrintGC是否开启) |
-flag [+,-]name | 启用或禁用指定名称的参数(指定的参数必须是Boolean类型) | jinfo -flag +PrintGC 123 (开启PrintGC) |
-flag name=value | Java虚拟机参数热批改,批改指定名称的参数为指定的值(java -XX:+PrintFlagsInitial命令显示标记为manageable的配置参数能力热批改) | jinfo -flag MinHeapFreeRatio=30 123 (批改闲暇堆空间的最小百分比为30) |
-flags | 打印全副的配置参数 | jinfo -flags 123 |
-sysprops | 以键值对的形式打印以后Java虚拟机的全副的零碎属性 | jinfo -sysprops 123 |
比拟罕用的flag name(局部):CICompilerCount
、ConcGCThreads
、G1HeapRegionSize
、G1ReservePercent
、+HeapDumpOnOutOfMemoryError
、InitialHeapSize
、MarkStackSize
、MaxGCPauseMillis
、MaxHeapSize
、MaxMetaspaceSize
、MaxNewSize
、MinHeapDeltaBytes
、UseCompressedClassPointers
、UseCompressedOops
、UseFastUnorderedTimeStamps
、UseG1GC
、UseLargePagesIndividualAllocation
、UseParNewGC
、UseParallelOldGC
、UseParallelGC
、UseConcMarkSweepGC
2.2 jstack
线程快照,转储Java线程的栈信息(Thread Dump)。
常见应用场景:
- 响应工夫RT高,TPS低,服务器资源耗费不高;
- 其余想要查看程序具体在做什么的场景;
用法:jstack [参数] <pid>
示例:jstack -m -l 123 > stack.log
参数 | 作用 |
---|---|
-F | 当失常输入的申请不被响应时(过程假死 hung住了),强制输入线程堆栈 |
-m | 显示C/C++的堆栈(如果存在本地办法调用) |
-l | 示对于锁的附加信息,在遇到死锁时很不便排查问题 |
能够配合收费的可视化剖析工具,比方IBM的Thread and Monitor Dump Analyzer for Java (TMDA),下载地址:https://www.ibm.com/support/p...
2.3 jmap
提供堆转储和其余JVM内存应用的信息。
常见应用场景:
- 内存应用很高或存在持续性增长趋势;
- Full GC频繁;
- 其余想查看实力对象信息的场景;
- 用法:jmap [参数] <pid>
参数 | 作用 | 示例 |
---|---|---|
-dump:[live,]format=b,file=/you/path/filename.hprof <pid> | 输入jvm的堆对象内容到指定文件。 live为可选项,代表是否只输入存活对象 | jmap -dump:format=b,live,file=heap.hprof 123 |
-finalizerinfo <pid> | 输入期待回收的对象信息。 | jmap -finalizerinfo 123 |
-heap <pid> | 输入以后java过程堆的概要信息,如GC算法,heap的配置空间等。 | jmap -heap 123 |
-histo[:live] <pid> | 输入以后class的实例数目、内存占用、类全名信息。 | jmap -histo:live 123 > minidump.log |
-permstat <pid> | 打印classload和jvm heap中perm代的信息,蕴含每个classloader的名字、活跃性、地址、父classloader和加载的class数量等信息。 | jmap -permstat 123 |
2.4 jhat
个别与jmap 配合应用,用于jvm内存快照剖析,内置了一个HTTP/Web服务器,能够通过浏览器查看jmap生成的快照文件。
用法:jhat [-stack <bool>] [-refs <bool>] [-port <port>] [-baseline <file>] [-debug <int>] [-version] [-h|-help] <heap-dump-file>
示例:jhat heap.hprof
参数 | 作用 |
---|---|
-stack false\true | 是否敞开跟踪对象调配调用堆栈。默认为true,即关上。 |
-refs false\true | 是否敞开对象的援用跟踪。默认是true,即关上。 |
-port port-number | 设置jhat HTTP服务器的端口。默认是7000。 |
-exclude exclude-file | 指定一个文件,该文件列出应从可达对象查问中排除的数据成员。 |
-baseline exclude-file | 指定基线堆转储。用于比照两个不同的堆快照。 |
-debug int | 设置此工具的调试级别。0级别示意没有调试输入。想要更具体的调试级别,则须要设置更高的值。总共3个等级,别离为0、1、2 |
-version | 显示版本号 |
-Jflag | 将flag传递给正在运行jhat命令的Java虚拟机。比方:-J-mx512m,设置最大堆内存为512M |
-h | 查看帮忙信息。 |
2.5 jstat
用于查看JVM虚拟机中的类加载、内存、垃圾收集、即时编译等运行状态的信息。
- 用法:jstat outputOptions [-t] [-h<lines>] <vmid> [<interval> [<count>]]
常见应用场景:
- 内存应用异样,监控GC状况;
- Full GC频繁;
- 想理解其余类如类加载,即时编译等信息;
参数 | 作用 | 示例 |
---|---|---|
-class | 显示类加载、卸载数量、总空间和装载耗时的统计信息。 | jstat -class 123 1 5 (查看123过程,距离1秒,输入5次) |
-compiler | 显示即时编译的办法、耗时等信息。 | 略 |
-gc | 显示堆各个区域内存应用和垃圾回收的统计信息。 | 略 |
-gccapacity | 显示堆各个区域的容量及其对应的空间的统计信息。 (比-gc显示信息更多) | 略 |
-gcutil | 显示无关垃圾收集统计信息的摘要。(按应用百分比显示) | 略 |
-gccause | 显示对于垃圾收集统计信息的摘要(与-gcutil雷同),以及最近和以后垃圾回收的起因。 | 略 |
-gcnew | 显示新生代的垃圾回收统计信息。 | 略 |
-gcnewcapacity | 显示新生代的大小及其对应的空间的统计信息。 | 略 |
-gcold | 显示老年代和元空间的垃圾回收统计信息。 | 略 |
-gcoldcapacity | 显示老年代的大小统计信息。 | 略 |
-gcmetacapacity | 显示元空间的大小的统计信息。 | 略 |
-printcompilation | 显示即时编译办法的统计信息。 | 略 |
输入字段含意参考:https://cloud.tencent.com/dev...
2.6 jcmd
JDK1.7当前新增的一个命令行工具。
- 独有的性能是能够监控原生内存(native memory)的应用状况。
- 和jmap、jstat、jstack、jinfo等命令存在性能上的穿插;
- 应用参考:https://blog.csdn.net/weixin_...
2.7 jconsole
可视化监控工具,可用于连贯正在运行的本地或者近程的JVM,对JVM资源耗费和性能进行监控。
官网文档:https://docs.oracle.com/javas...
2.8 jvisualvm
VisualVM可视化监控工具,可连贯和监控本地和近程的JVM,可能监控线程,内存状况,查看办法的CPU工夫和内存中的对象,性能比jconsole更加全面,并有丰盛的第三方插件。
官网文档:https://docs.oracle.com/javas...
2.9 MAT
eclipse旗下开源JVM堆内存快照剖析工具;
具体应用可参考:https://www.cnblogs.com/trust...
2.10 Arthas
根本蕴含了JDK自带工具所有的性能。除了没有好看的可视化界面外,剖析性能真的入地。
有很多骚性能,比方:
- 代码热批改
- log级别热批改
- 拦挡办法传参和出参等
官网学习文档:http://arthas.gitee.io