暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

常用 JVM 调优工具

追梦Java 2023-08-07
47
点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~

JVM 日常调优总结起来就是:首先通过 jps 命令查看当前进程,然后根据 pid 通过 jinfo 命令查看和修改 jvm 参数,通过 jstat 命令查看 class 的加载信息以及 GC 信息,通过 jstack 命令查看线程堆栈信息,通过 jmap 命令查看堆内存信息。用以上的命令查看可以解决一些问题,但是对于 GC 日志以及 dump 文件不便于分析,因此下面介绍几个常用的图形化界面工具。


1

JDK 自带工具(jdk/bin 目录下)

1、jconsole


查看 java 应用程序的运行概览、监控堆信息,可以监控Java应用程序的内存使用情况、线程状态、CPU占用率等。


cmd 里输入 jconsole,或者 jdk/bin 目录下点击 jconsole.exe 打开 jconsole 工具,如下图:

可以对本地进程或者远程进程,连接之后可以进行 JVM 信息查看:

2、jvisualvm


jvisualvm 工具在 Java 内存模型章节介绍过了,它是一个免费的Java虚拟机监视、分析和调试工具,可以监控Java应用程序的内存使用情况、线程状态、CPU占用率,可以监控 java进程的 CPU、堆、类以及线程等情况

点击线程Dump按钮,如下:


3、以上的工具可以通过远程连接 Linux 环境,进行远端 tomcat 监听


1、要想让服务器上的 tomcat 被连接,需要修改一下 tomcat 目录 bin/catalina.sh 文件中 JAVA_OPTS 参数,在参数后面添加以下内容:

cd usr/local/tomcat/tomcat-8/

    -Dcom.sun.management.jmxremote.port=8989
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.authenticate=true
    -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access
    -Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password


    2、在 tomcat 目录 conf/ 文件中添加两个文件 jmxremote.access 和 jmxremote.password,一个是账号的权限,一个是账号密码,并给这 2 个文件授予可读写权限:

    chmod -R 600 jmxremote.access

    chmod -R 600 jmxremote.password


    jvisualvm 连接远端 tomcat 进程:

    1、在 jvisualvm 中选中“远程”,右键“添加”

    2、主机名上写服务器的 ip 地址,比如 66.xxx.xxx.xxx,然后点击“确定”

    3、右键该主机“66.xxx.xxx.xxx”,“添加 JMX 连接”,表示通过 JMX 技术连接远端服务器的 Java 进程

    4、在“添加 JMX 连接”界面中“连接”里输入“66.xxx.xxx.xxx:8989”,勾选“使用安全凭证”,输入用户名和密码,点击确定进行远端连接。

    2

    Arthas 


    Arthas是Alibaba开源的Java诊断工具。Arthas主要包含Command和IDE两种模式,同时也包含JDK和JVM调试、类信息、线程分析、系统信息、多线程诊断、GC分析、应用性能监控、堆栈分析、方法体分析、JVM参数调整、线上问题定位等功能。

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

    curl -O https://arthas.aliyun.com/arthas-boot.jar

    java -jar arthas-boot.jar

    具体可参考:

    https://github.com/alibaba/arthas

    https://github.com/alibaba/arthas/blob/master/README_CN.md

    3

    Java堆分析器 MemoryAnalyzer(MAT)


    Java堆分析器Memory Analyzer(MAT,Memory Analyzer Tool)是一种用于分析Java堆的强大工具。MAT是一个开源工具,可以与Eclipse集成使用,也可以作为独立的命令行工具使用。它由Java开发,可以在任何支持Java的平台上运行。

    MAT的主要功能包括:

    快速查找和比较不同heap dump文件。导出报告和分析结果,包括CSV、Excel、XML和HTML格式。

    Eclipse 的 MAT 插件 MemoryAnalyzer 用于分析堆内存泄漏,下载地址:https://www.eclipse.org/mat/downloads.php。

    下载以后解压,我们可以运行 mat 目录下的 MemoryAnalyzer.exe,用它打开 Heap Dump 文件,以便于我们进行分析堆内存泄漏问题,如下:

    Histogram:查看内存中的每个类的对象实例、对象的个数及其大小

    Leak Suspects:查看内存泄漏的可能原因

    Top Consumers:查看大对象

    在类名上右键--->List Objects--->with incoming references 可以列出该类的实例,如下:

    在类名上右键--->Merge Shortest Paths to GC Roots--->exclude all phantom/weak/soft etc.references 可以看到 GC Root 以及没有垃圾回收的原因,如下:

    大家可以自己研究一下。

    4

    在线分析网站 perfma


    官方网址:https://perfma.com

    Java 虚拟机参数分析:https://club.perfma.com/topic/product-opts

    Java 线程 Dump 分析:https://club.perfma.com/topic/product-thread

    Java 内存 Dump 分析:https://club.perfma.com/topic/product-memory

    大家可以自己研究一下。

    5

    GC 日志分析


    通过以下命令开启 GC 日志打印,拿到 GC 日志以后,就可以用工具进行进一步地分析了。

    -XX:+PrintGCDetails:打印 GC 详细信息

    -XX:+PrintGCDateStamps:在每个 GC上打印日期戳

    -XX:+PrintGCTimeStamps:在每个 GC 上打印时间戳

    -Xloggc:指定 GC log 的位置和日志文件名称

      在运行程序时,为了快速发生内存溢出,设置内存为 10M
      -Xms10M -Xmx10M


      设置以下的参数,可以开启 GC 日志打印
      -XX:+PrintGCDetails
      -XX:+PrintGCDateStamps
      -XX:+PrintGCTimeStamps
      -Xloggc:d:/dump/gc.log

      GC 日志在线分析网站 gceasy:https://gceasy.io/

      GC 日志本地分析工具 gcviewer:

      具体可参考:https://github.com/chewiebug/GCViewer

      下载地址:https://sourceforge.net/projects/gcviewer

      双击下载的 gcviewer-1.37-SNAPSHOT.jar 文件可打开分析界面,选择 gc 日志文件打开即可,如下:

      后面将为大家介绍 JVM 调优实例。

      文章转载自追梦Java,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论