//====================================
jps
显示当前所有java进程pid的命令
jps -l
-l 输出应用程序main class的完整package名 或者 应用程序的jar文件完整路径名
//====================================
jmap
jmap主要可以用于打印Java进程的内存映射或堆内存(Heap Dump文件)细节
jmap -histo 进程号 >1.txt //可以查看对象个数,占用堆内存大小,类名称
jmap -histo:live 6788 //输出到终端中
jmap -histo:live 6788 > d:/dump.txt //
//live,这个参数表示我们需要抓取目前在生命周期内的内存对象
6788:为进程ID
//内存使用的详细情况输出到文件
jmap -heap 进程号 >1.txt //可以查看新生代 老年代的使用情况
统计实例最多的类 前十位有哪些
jmap -histo pid | sort -n -r -k 2 | head -10
统计合计容量前十的类有哪些
jmap -histo pid | sort -n -r -k 3 | head -10
说明:
sort命令的部分参数含义解释如下
-n :使用“”纯数字”进行排序(默认是以文字类型来排序)
-r : 反向排序
-k :以那个区间(field)来进行排序的意思
64位机上使用需要使用如下方式:
jmap -J-d64 -heap pid
jmap -dump:format=b,file=outfile 3024可以将3024进程的内存heap输出出来到outfile文件里,再配合MAT(内存分析工具)
-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
jmap -permstat 3772
jmap -dump:[live,]format=b,file=
通过-dump选项,把java堆中的对象dump到本地文件,然后使用MAT进行分析。
如果添加了live,只会dump活跃的对象。
jmap -histo[:live]
通过histo选项,打印当前java堆中各个对象的数量、大小。
如果添加了live,只会打印活跃的对象。
jmap -heap
通过-heap选项,打印java堆的配置情况和使用情况,还有使用的GC算法。
jmap -finalizerinfo
通过-finalizerinfo选项,打印那些正在等待执行finalize方法的对象。
jmap -permstat
通过-permstat选项,打印java堆永久代的信息,包括class loader相关的信息,和interned Strings的信息。
http://www.itboth.com/d/IjMjYj/jmap(jmap 命令的实现原理解析)
//====================================
jstack
jstack是java虚拟机自带的一种堆栈跟踪工具
以轻松地知道java程序是如何崩溃和在程序何处发生问题。
jstack 查看线程具体在做什么,可看出哪些线程在长时间占用CPU,尽快定位问题和解决问题
在64位机器上,需要指定选项"-J-d64"
jstack [-l] pid
https://www.cnblogs.com/kongzhongqijing/articles/3630264.html
//====================================
JConsole
可以查看内存,线程数,CPU,Mbean,但那个类的实例个数和占用内存情况没有
JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行,
//====================================
jstat
jstat:用于输出java程序内存使用情况,包括新生代、老年代、元数据区容量、垃圾回收情况。
jstat -gcutil pid time
//====================================
MAT(与jhat类似但比jhat功能丰富些)
MAT(Memory Analyzer Tool)工具是eclipse的一个插件(MAT也可以单独使用),使用起来非常方便,尤其是在分析大内存的dump文件时,可以非常直观的看到各个对象在堆空间中所占用的内存大小、类实例数量、对象引用关系、利用OQL对象查询,以及可以很方便的找出对象GC Roots的相关信息,当然最吸引人的还是能够快速为开发人员生成内存泄露报表,方便定位问题和分析问题。
jmap -dump:format=b,file=d:/heapTest.bin 3676 //生成文件
//====================================
jhat
jhat(Java Head Analyse Tool)是jdk自带的用来分析java堆快照的工具
用途:是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言
有时你dump出来的堆很大,在启动时会报堆空间不足的错误,可以使用如下参数:
jhat -J-Xmx512m
第一步:导出堆
jmap -dump:format=b,file=d:/heapTest.bin 3676
第二步:分析堆文件
jhat d:/heapTest.bin
第三步:查看html
http://localhost:7000
这里列出对象,对象实例数量、总占用内存大小
http://localhost:7000/histo/
对于jhat启动后显示的html页面中功能:
(1)显示出堆中所包含的所有的类
(2)从根集能引用到的对象
(3)显示平台包括的所有类的实例数量
(4)堆实例的分布表
(5)执行对象查询语句
//====================================
JProfiler
这个软件是商用的
//====================================
JVisualVM
在JVisualVM的插件库中,可以安装btrace插件。安装后,可以在程序运行的过程中,直接进行代码更改。
与JConsole一样打开,JConsole是JVisualVM的子集
安装Visual GC插件,可以查看GC信息
https://blog.csdn.net/kl28978113/article/details/53817827(JVisualVM简介与内存泄漏实战分析)