JDK调优工具

一、JDK 监控工具

1.1 jps: jvm进程状况工具

显示指定系统内的所有HotSpot进程,命令格式:
jps [option] [ hostid]
hostid为RMI注册表中注册的主机名

选项 作用
-q 值输出LVMID
-m 输出虚拟机进程启动的传递给main的参数
-l 输出主类全类名;若果时jar、war显示jar、war名称
-v 输出虚拟机进程启动时JVM参数

1.2 jstat:jvm统计信息监视工具

用于收集HotSpot个方面的运行数据,包括类装载、内存、垃圾回收、JIT等运行数据,在没有GUI界面,它将是jvm性能问题的首选项

jstat [option vmid [interval[m|ms] [count] ] ]

如果是远程程序 vmid变成 [protocal:][//]vmid[@hostname[:port]/servername]

Option主要分为三类:1.类装载;2垃圾回收;3.运行期编译状况。

选项 作用
-class 监视类的装载、卸载数量、总空间以及类装载所好烦的时间
-gc 监视类Java堆状况,包括Eden区、两个survivor区, 看各个区域的使用大小
-gccapacity 显示各个代的容量以及使用情况;
-gcmetacapacity 显示metaspace的大小
-gcnew 显示新生代信息;
-gcnewcapacity 显示新生代大小和使用情况;
-gcold 显示老年代和永久代的信息;
-gcoldcapacity 显示老年代的大小;
-gcutil 显示垃圾收集信息, 看各个区域的使用百分比;
-gccause 显示垃圾回收的相关信息(通-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因;
-printcompilation 输出JIT编译的方法信息;
C:\Program Files\Java\jdk1.8.0_181\bin>jstat -gc 15800
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
5120.0 5120.0  0.0   5097.8 33280.0  17026.3   87552.0     754.3    20992.0 20348.8 2560.0 2367.3      3    0.026   0      0.000    0.026

1.3 jinfo: java配置信息工具

jinfo -flags 2289 查看启动参数
显示jvm配置信息,+或- 配置jvm参数

1.4 jmap:java内存映象工具

用于生成堆转储快照,还可以参看finalize执行队列,java堆、永久代的详情,如空间使用率,哪种垃圾回收器等。

选项 作用
-dump 生成java堆转储快照
-finalizerinfo 等待F你那里责任线程执行finalizer方法的对象。只在Linux、Solaris有效
-heap 堆详情,如:使用哪种回收期、参数配置、分代等只在Linux、Solaris有效
-histo 显示在队中对象统计信息。包括类、实例数量、合计容量
-permstat ClassLoader为统计接口用接待内存状态只在Linux、Solaris有效
-F 强制输出dump快照。只在Linux、Solaris有效

jmap -dump:format=b,file=heap.hprof 31531
获得堆快照文件之后,我们可以使用多种工具对文件进行分析,例如jhat,visual vm等。

1.5 jhat:jvm堆转储快照分析工具

使用jhat工具可以分析Java应用程序的堆快照文件,使用命令如下:
jhat heap.hprof

jhat在分析完成之后,使用HTTP服务器展示其分析结果,在浏览器中访问http://127.0.0.1:7000/即可得到分析结果。

1.6 jstack : java堆栈跟踪工具

用于生成kvm当前线程的快照(threadtump或javacore工具)

选项 作用
F 强制输出线程堆栈
l 附加关于锁的信息
m 本地方法,可以显示c/c++堆栈

1.7 HSDIS: JIT代码生成反汇编

让HotSpot的-XX:+printAssembly指令调用它来把动态代码生成的本地代码还原成汇编输出。

1.8 jstatd命令

jstatd命令是一个RMI服务器程序,它的作用相当于代理服务器,建立本地计算机与远程监控工具的通信,jstatd服务器能够将本机的Java应用程序信息传递到远程计算机,由于需要多台计算机做演示,此处略。

1.9 hprof工具

hprof工具可以用于监控Java应用程序在运行时的CPU信息和堆信息,关于hprof的官方文档如下:https://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html

2 jdk可视化工具

2.1 jconsole

2.2 VisualVM

2.3 MAT内存分析工具

MAT是一款功能强大的Java堆内存分析器,可以用于查找内存泄露以及查看内存消耗情况,MAT的官方文档如下:http://help.eclipse.org/luna/index.jsp?topic=/org.eclipse.mat.ui.help/welcome.html。

在MAT中有浅堆和深堆的概念,浅堆是指一个对象结构所占用的内存大小,深堆是指一个对象被GC回收后可以真正释放的内存大小。

通过MAT,可以列出所有垃圾回收的根对象,Java系统的根对象可能是以下类:系统类,线程,Java局部变量,本地栈等等。在MAT中还可以很清楚的看到根对象到当前对象的引用关系链。

MAT还可以自动检测内存泄露,单击菜单上的Leak Suspects命令,MAT会自动生成一份报告,这份报告罗列了系统内可能存在内存泄露的问题点。

在MAT中,还可以自动查找并显示消耗内存最多的几个对象,这些消耗大量内存的大对象往往是解决系统性能问题的关键所在。

3. Arthas - Java

官网:https://alibaba.github.io/arthas
强大功能:

  1. 是否有一个全局视角来查看系统的运行状况?
  2. 为什么 CPU 又升高了,到底是哪里占用了 CPU ? 运行的多线程有死锁吗?有阻塞吗?
  3. 程序运行耗时很长,是哪里耗时比较长呢?如何监测呢?
  4. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  5. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  6. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  7. 有什么办法可以监控到 JVM 的实时运行状态?

3.1 下载与启动:

arthas-boot.jar,然后用java -jar的方式启动:

# 运行方式1,先
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值