javap
javap [options] classfile…
javap命令反汇编一个或多个类文件。输入取决于所应用的选项。如果不应用任何选项,则javap命令将打印程序包,受爱护的字段和公共字段以及传递给它的类的办法。javap命令将其输入打印到stdout
jps
JVM Process Status Tool - Lists instrumented HotSpot Java virtual machines on a target system.
JVM过程状态工具-列出指标零碎上已检测到的HotSpot Java虚拟机
jstat
监督Java虚拟机(JVM)统计信息,次要是 GC 信息,在性能优化中常常用到。此命令是实验性的不受反对。
通过 jps 查到的过程号 31007,咱们应用 jstat -gc 31007 来查看该过程的 GC 信息
每个对象都有一个指向它本身类的指针,_klass: 指向类的 4 字节指针,64 位平台上 _klass: 指向类的 8 字节的指针,为了节约这些空间,引入了类指针压缩空间。
jcmd
JVM诊断命令工具-将诊断命令申请发送到正在运行的Java虚拟机,能够查看 JVM 信息
jcmd [-l|-h|-help]
先应用 jps 获取 [pid]
应用 jcmd [pid] help 来查看都反对什么命令
选一个参数,比方打印堆的信息,应用 jcmd 31007 GC.heap_info 命令
还能够进一步查看命令的班帮忙信息 jcmd 31007 help GC.heap_dump
jmap
jmap是一个重要的工具,查看内存详细信息,能够dump到文件中
应用:
jmap [-F] -dump:live,format=b,file=/tmp/a pid
-F 示意强制执行,live示意收集存活的对象,file存储到某个文件。dump文件下来后,能够应用工具来剖析堆内存,包含jmap -histo、mat等
jmap [-F] -histo pid
查看堆内存的状况,依照对象数和对象占用的内存排队,能够初步定位到是哪个对象占用过多内存,内存透露的中央。前面应用mat工具能剖析到哪个来存储的这个对象,也就是GCroot在哪
jmap [-F] heap pid
heap能查看以后应用的垃圾收集器是什么和一些参数策略,还有具体的内存散布,个别用不到。参数能够用jinfo,内存散布能够用jstat
jhat
jhat会剖析一个dump文件,而后把后果公布到一个html服务器上,有肯定的用处,html也是次要看histogram。和咱们的jmap -histo性能相似,所以楼主感觉用途不大。
应用:
jhat file
返回拜访127.0.0.1:7000 查看histogram
jstack
jstack是比拟有用的一个命令,查看线程的状况,蕴含锁,打印Java过程,外围文件或近程调试服务器的Java线程堆栈跟踪,俗称javacore
应用:
jstack [-F] [-l] pid
-l蕴含锁信息
jconsole
查看jvm的内存,cpu信息,线程,参数,类信息
jvisualvm
是一个比拟好用的工具,界面性能更弱小,界面更敌对。
也是监控内存,cpu,线程,类信息和参数的。还能够执行dump和javacore的生成。
如果产线容许的话,能够间接连贯到产线发现解决问题。设置近程ip和jmx端口。当然产线的java启动须要设置jmx配置:
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=18080
mat
mat是一个比拟弱小的剖析堆溢出的工具。把之前dump文件导入到工具中。
首先看overview。
有几个比拟重要的信息。
1、图中列出的大对象
左击list object->with outgoing references,查看次大对象是哪个GCroot。
shallow heap为本对象大小,retained heap为理论蕴含的对象的总大小。次要看retained heap,一层一层开展,可能看到哪个类中存在存储大对象。
2、histogram
和jmap -histo和jhat中的相似。
3、dominator tree
查看各个对象的GCroot,和第一个点相似
4、leak suspects
内存透露疑点报告,会把可能的内存透露点展现,再查看detail,就能看到具体信息。