suyouming 2019-01-21
JVM监控工具
//====================================
jps
显示当前所有java进程pid的命令
jps-l
-l输出应用程序mainclass的完整package名或者应用程序的jar文件完整路径名
//====================================
jmap
jmap主要可以用于打印Java进程的内存映射或堆内存(HeapDump文件)细节
jmap-histo进程号>1.txt//可以查看对象个数,占用堆内存大小,类名称
jmap-histo:live6788//输出到终端中
jmap-histo:live6788>d:/dump.txt//
//live,这个参数表示我们需要抓取目前在生命周期内的内存对象
6788:为进程ID
//内存使用的详细情况输出到文件
jmap-heap进程号>1.txt//可以查看新生代老年代的使用情况
统计实例最多的类前十位有哪些
jmap-histopid|sort-n-r-k2|head-10
统计合计容量前十的类有哪些
jmap-histopid|sort-n-r-k3|head-10
说明:
sort命令的部分参数含义解释如下
-n:使用“”纯数字”进行排序(默认是以文字类型来排序)
-r:反向排序
-k:以那个区间(field)来进行排序的意思
64位机上使用需要使用如下方式:
jmap-J-d64-heappid
jmap-dump:format=b,file=outfile3024可以将3024进程的内存heap输出出来到outfile文件里,再配合MAT(内存分析工具)
-permstat打印classload和jvmheap长久层的信息.包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量.另外,内部String的数量和占用内存数也会打印出来.
jmap-permstat3772
jmap-dump:[live,]format=b,file=<filename><pid>
通过-dump选项,把java堆中的对象dump到本地文件,然后使用MAT进行分析。
如果添加了live,只会dump活跃的对象。
jmap-histo[:live]<pid>
通过histo选项,打印当前java堆中各个对象的数量、大小。
如果添加了live,只会打印活跃的对象。
jmap-heap<pid>
通过-heap选项,打印java堆的配置情况和使用情况,还有使用的GC算法。
jmap-finalizerinfo<pid>
通过-finalizerinfo选项,打印那些正在等待执行finalize方法的对象。
jmap-permstat<pid>
通过-permstat选项,打印java堆永久代的信息,包括classloader相关的信息,和internedStrings的信息。
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性能分析器,可以从命令行或在GUIshell中运行,
//====================================
jstat
jstat:用于输出java程序内存使用情况,包括新生代、老年代、元数据区容量、垃圾回收情况。
jstat-gcutilpidtime
//====================================
MAT(与jhat类似但比jhat功能丰富些)
MAT(MemoryAnalyzerTool)工具是eclipse的一个插件(MAT也可以单独使用),使用起来非常方便,尤其是在分析大内存的dump文件时,可以非常直观的看到各个对象在堆空间中所占用的内存大小、类实例数量、对象引用关系、利用OQL对象查询,以及可以很方便的找出对象GCRoots的相关信息,当然最吸引人的还是能够快速为开发人员生成内存泄露报表,方便定位问题和分析问题。
jmap-dump:format=b,file=d:/heapTest.bin3676//生成文件
//====================================
jhat
jhat(JavaHeadAnalyseTool)是jdk自带的用来分析java堆快照的工具
用途:是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言
有时你dump出来的堆很大,在启动时会报堆空间不足的错误,可以使用如下参数:
jhat-J-Xmx512m<heapdumpfile>
第一步:导出堆
jmap-dump:format=b,file=d:/heapTest.bin3676
第二步:分析堆文件
jhatd:/heapTest.bin
第三步:查看html
http://localhost:7000
这里列出对象,对象实例数量、总占用内存大小
http://localhost:7000/histo/
对于jhat启动后显示的html页面中功能:
(1)显示出堆中所包含的所有的类
(2)从根集能引用到的对象
(3)显示平台包括的所有类的实例数量
(4)堆实例的分布表
(5)执行对象查询语句
//====================================
JProfiler
这个软件是商用的
//====================================
JVisualVM
在JVisualVM的插件库中,可以安装btrace插件。安装后,可以在程序运行的过程中,直接进行代码更改。
与JConsole一样打开,JConsole是JVisualVM的子集
安装VisualGC插件,可以查看GC信息
https://blog.csdn.net/kl28978113/article/details/53817827(JVisualVM简介与内存泄漏实战分析)