JVM性能监控与分析工具

本文介绍了JVM性能监控的几个关键工具,包括jps、jstat、jinfo、jmap、jhat和jstack,以及如何生成和分析JavaCore和HeapDump文件。这些工具可以帮助开发者定位线程卡顿、内存泄漏和性能问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分析工具

JVM性能相关的6个常用的JDK命令

  • jps:查询JVM中的所有进程,找出将要操作的PID,是所有命令的基础
  • jstat:查看相应JVM进程的gc、类加载卸载信息,是没有GUI界面查看JVM运行数据的首选
  • jinfo:查看和在运行期动态修改JVM配置参数
  • jmap:生成堆转储快照和比较占内存的对象
  • jhat:配合jmap分析堆转储日志
  • jstack:生成线程快照,定位线程长时间卡顿的原因(线程间死锁、死循环、请求外部资源导致的长时间等待)

jdk8的相关工具的索引:https://docs.oracle.com/javase/8/docs/technotes/tools/

1、jps:查看本地正在运行的java进程和进程ID(pid)

          

2、jstat(在运行期定位JVM性能问题的首选):用于监视JVM各种堆和非堆内存大小和使用量

    1)jstat -gc pid:输出gc信息,包括gc次数和时间,内存使用状况

         

     详细说明:https://www.cnblogs.com/zhi-leaf/p/10629776.html

3、jinfo:查看指定pid的所有jvm信息

 1)jinfo -flags pid 查询虚拟机运行参数信息。

 2)jinfo -flag name pid,查询具体参数信息,如jinfo -flag UseSerialGC 42324,查看是否启用UseSerialGC

         

4、jmap

 1)jmap -heap pid:输出堆内存设置和使用情况

 2)jmap -histo pid:输出heap的直方图,包括类名,对象数量,对象占用大小

 3)jmap -histo:live pid:同上,只输出存活对象信息

         

  4)jmap -dump:format=b,file=文件名 PID生成堆转储快照和查看最占内存的元素,用于分析内存泄露问题。

       

5、jhat:分析堆转储快照(与jmap配合)

      

      执行上述命令后,打开localhost:7000

      

6、jstack:生成线程快照,定位线程长时间卡顿的原因(线程间死锁、死循环、请求外部资源导致的长时间等待)

     1)jstack -l  pid:查看进程中的所有线程的堆栈信息

     具体应用可参考:快速定位生产故障问题-JVM进程CPU占用率高于100%

JavaCore/HeapDump文件及其分析方法

一般生产不会让你直接操作服务器查看,所以可以找运维要javacore和Heapdump文件

  • JavaCore文件主要保存的是Java应用各线程在某一时刻的运行的位置,即JVM执行到哪一个类、哪一个方法、哪一个行上。它是一个文本文件,打开后可以看到每一个线程的执行栈,以stack trace的显示。通过对JavaCore文件的分析可以得到应用是否“卡”在某一点上,即在某一点运行的时间太长,例如数据库查询,长期得不到响应,最终导致系统崩溃等情况。
  • HeapDump文件是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况,这种文件需要相应的工具进行分析,如IBM Heap Analyzer这类工具。这类文件最重要的作用就是分析系统中是否存在内存溢出的情况。

如何生成

Heap Dump文件生成

  • JVM的配置参数:可以添加 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${目录}(heapdump文件存放位置)参数,当应用抛出 OutOfMemoryError 时自动生成dump文件
  • jconsole生成:jconsole是sun的JDK中自带的工具,在java_home/bin/jconsole.exe中就可以打开。p0参数填上提取出heap dump后的存储路径,p1参数填上true以导出仍未被回收的Objects信息

           

  • jmap命令生成:jmap -dump:live,format=b,file=heap.bin pid

       

  • jvisualvm生成:jvisualvm是sun的JDK中自带的工具,在java_home/bin/jvisualvm.exe中就可以打开

       

JavaCore生成

  • 系统宕机自动生成。IBM的JDK在系统宕机的时候会自动生成javacore,这也是我们经常用该JDK替换默认的缘故
  • kill -3 -pid  在linux平台上,可以直接调用系统的kill -3方法
  • jvisualvm生成

    ​​​​​​​

如何分析

JVM故障分析及性能优化系列

JVM问题典型案例定位学习

问题思路

1、线程是否阻塞、死锁了。

2、内存泄漏导致垃圾回收频繁、垃圾回收耗时高

性能问题的原因就很多了,例如:

  • 数据库连接一直未释放,慢sql(大数据的查询)
  • 基于poi生成excel文件,占用内存
  • 参数配置不合理,如Jboss的最大线程数设置默认值10,如不调整在大并发下,性能无法达到预期

参考文章:

https://www.cnblogs.com/java-zhao/p/5184485.html

https://www.jianshu.com/p/37b1b32bc6f3​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值