JVM 监控工具

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简介与内存泄漏实战分析)

相关推荐