乐趣区

关于java:Java开源性能分析工具集锦

1. 前言

  我的开源剖析工具小笔记。

2. JDK 原生的工具

2.1 jinfo

JDK 提供的一个能够实时查看 Java 虚拟机各种配置参数和零碎属性的命令行工具。

常见应用场景:

  1. 查看 JVM 默认配置参数;
  2. 查看批改的配置参数是否失效;
  3. 其余;
  • 用法: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(局部):CICompilerCountConcGCThreadsG1HeapRegionSizeG1ReservePercent+HeapDumpOnOutOfMemoryError InitialHeapSizeMarkStackSizeMaxGCPauseMillisMaxHeapSizeMaxMetaspaceSizeMaxNewSizeMinHeapDeltaBytesUseCompressedClassPointersUseCompressedOopsUseFastUnorderedTimeStampsUseG1GCUseLargePagesIndividualAllocationUseParNewGCUseParallelOldGCUseParallelGCUseConcMarkSweepGC

2.2 jstack

线程快照,转储 Java 线程的栈信息(Thread Dump)。

常见应用场景:

  1. 响应工夫 RT 高,TPS 低,服务器资源耗费不高;
  2. 其余想要查看程序具体在做什么的场景;
  • 用法: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 内存应用的信息。

常见应用场景:

  1. 内存应用很高或存在持续性增长趋势;
  2. Full GC 频繁;
  3. 其余想查看实力对象信息的场景;
  • 用法: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>]]

常见应用场景:

  1. 内存应用异样,监控 GC 状况;
  2. Full GC 频繁;
  3. 想理解其余类如类加载,即时编译等信息;
参数 作用 示例
-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

退出移动版