常用 JVM 调优工具

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

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

1

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

4e8f7f9ba8d1ea77561660fb2cc462b4.png

1、jconsole

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

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

fe385e76e4df19e30df73404a80935a0.png

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

7d6bb215d1b813f262c70dcbb5802aec.png

2、jvisualvm

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

a34475cb360e281e665531e765072ced.png

点击线程Dump按钮,如下:

41e0e5ee9f0df6fad6b2c423761bc127.png

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 

1148ea0aa57272d1c5e534f25b528fbb.png

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)

3fe2627154c82b24c2fa0a6d95ed62eb.png

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。

589635ced7d9f9f5eab86c14f06f49da.png

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

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

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

Top Consumers:查看大对象

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

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

大家可以自己研究一下。

4

在线分析网站 perfma

2efaabea268eabb188b62486579893ac.png

官方网址: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 日志分析

5f6643b8211b88627e6716a372ca65e0.png

通过以下命令开启 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/

f68858eddd5588063eb6c5af0a98823d.png

GC 日志本地分析工具 gcviewer:

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

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

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

a7f991f78c83ef15fc5a0207468e3189.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/28714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

商品控价的流程有哪些

品牌要做好控价,流程其实不复杂,并且可以形成体系去做,不管针对哪个渠道,用下面这套流程去做,可以降低品牌的控价成本,提长品牌的控价效果。 首先,找一家合适的第三方控价公司 选择有时候比执行…

GD32F103VE串口与DMA传输

GD32F103VE串口与DMA传输,本测试采用的的串口1和DMA0之间的数据传输,然后通过RS485和其它设备进行数据交换,没有采用任何中断参与。 GD32F103VE的DMA0请求映射到串口: 1,USART0_RX映射到DMA0的通道4,USART…

FFmpeg 硬编码VideoToolBox流程

介绍 FFmpeg已经提供对 VideoToolBox 的编解码支持;主要涉及到的文件有videotoolbox.c、videotoolbox.h、videotoolboxenc.c、ffmepg_videotoolbox.c。在编译 FFmpeg 源码时,想要支持VideoToolBox,在 configure 时,需要–enable-…

艺术创作的新纪元:如何训练Lora模型打造令人惊叹的AI绘画

目录 前言一、🦁 选择合适的云端平台1-1、云端平台的优势1-2、选择适合的云端平台 二、🦁 账号注册三、🦁 开始炼丹3-1、购买算力并创建工作空间3-2、启动工作空间3-3、应用市场一键安装 四、🦁 使用Stable-Diffusion作图4-1、国风…

Flutter系列文章-实战项目

在本篇文章中,我们将通过一个实际的 Flutter 应用来综合运用最近学到的知识,包括保存到数据库、进行 HTTP 请求等。我们将开发一个简单的天气应用,可以根据用户输入的城市名获取该城市的天气信息,并将用户查询的城市列表保存到本地…

【设计模式】责任链的基本概念及使用Predicate灵活构造校验链

文章目录 1. 概述1.1.背景1.2.责任链模式的概念 2.责任链的基本写法2.1.链表实现2.2.数组实现 3.Predicate校验链2.1.使用Predicate改写代码2.1.更丰富的条件拓展 4.总结 1. 概述 1.1.背景 在最近的开发中遇到了这么一个需求,需要对业务流程中的各个参数做前置校验…

python版《羊了个羊》游戏开发第一天

Python小型项目实战教学课《羊了个羊》 一、项目开发大纲(初级) 版本1.0:基本开发 课次 内容 技术 第一天 基本游戏地图数据 面向过程 第二天 鼠标点击和移动 面向对象 第三天 消除 设计模式:单例模式 第四天 完整…

MyBatis和MyBatis-plus配置多数据源和操作多数据库

一,学习MyBatis和MyBatis-plus: mybatis:官网文档:mybatis – MyBatis 3 | 简介 mybatis-plus:官网文档:MyBatis-Plus 二,MyBatis来实现多数据源的查询: 配置文件的格式: spring:datasource: db1:driv…

【Hystrix技术指南】(4)故障切换的运作流程

[每日一句] 也许你度过了很糟糕的一天,但这并不代表你会因此度过糟糕的一生。 [背景介绍] 分布式系统的规模和复杂度不断增加,随着而来的是对分布式系统可用性的要求越来越高。在各种高可用设计模式中,【熔断、隔离、降级、限流】是经常被使…

代码随想录算法训练营day60

文章目录 Day60 柱状图中最大的矩形题目思路代码 Day60 柱状图中最大的矩形 84. 柱状图中最大的矩形 - 力扣(LeetCode) 题目 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图…

模拟实现消息队列项目(系列5) -- 服务器模块(虚拟主机)

目录 前言 1. 创建VirtualHost 1.1 定义虚拟主机的相关属性 1.2 VirtualHost 构造方法 1.3 交换机和队列的创建和删除 1.3.1 交换机操作 1.3.2 队列操作 1.4 绑定的创建和删除 1.5 发送消息到指定的队列/交换机 2. 实现路由规则Router 2.1 checkBindingKey() 2.2 checkRoutin…

【Spring Boot】Spring Boot项目的创建和文件配置

目录 一、为什么要学Spring Boot 1、Spring Boot的优点 二、创建Spring Boot项目 1、创建项目之前的准备工作 2、创建Spring Boot项目 3、项目目录的介绍 4、安装Spring Boot快速添加依赖的插件 5、在项目中写一个helloworld 三、Spring Boot的配置文件 1、配置文件的…

TCP/IP四层模型对比OSI七层网络模型的区别是啥?数据传输过程原来是这样的

一、TCP/IP四层模型对比OSI七层模型 它们两个定义的一些功能和协议都是差不多的。TCP/IP四层协议模型比我们的七层少了三层,把我们的数据链路层和物理层放在一层里面了,叫做数据链路层(网络接口层),对应网络协议也没有…

本质安全设备标准(IEC60079-11)的理解(六)温度

本质安全设备标准(IEC60079-11)的理解(六)温度 本质安全设备的温度要求也是非常复杂的,首先在标准中涉及有3个温度的概念: 环境温度ambient temperature, 工作温度service temperature和最高表…

【Docker】数据库动态授权组件在Kubernetes集群下的测试过程记录

目录 背景 组件原理 测试设计 环境 测试脚本 脚本build为linux可执行文件 镜像构建 Dockerfile Docker build 镜像有效性验证 总结 资料获取方法 背景 我们都知道出于安全性考虑,生产环境的权限一般都是要做最小化控制,尤其是数据库的操作授…

【MFC】05.MFC第一大机制:程序启动机制-笔记

MFC程序开发所谓是非常简单,但是对于我们逆向人员来说,如果想要逆向MFC程序,那么我们就必须了解它背后的机制,这样我们才能够清晰地逆向出MFC程序,今天这篇文章就来带领大家了解MFC的第一大机制:程序启动机…

STM32 低功耗学习

STM32 电源系统结构介绍 电源系统:VDDA供电区域、VDD供电区域、1.8V供电区域、后备供电区域。 器件的工作电压(VDD)2.0~3.6V 为了提高转换精度,给模拟外设独立供电。电压调节器为1.8V供电区域供电,且1.8V供电区域是电…

Snapdrop手机电脑互传-无需下载App

软件介绍 Snapdrop:浏览器中的本地文件共享。灵感来自苹果的空投。 软件访问地址: Snapdrop官网地址 软件开源地址: github 软件截图

【自然语言处理】大模型高效微调:PEFT 使用案例

文章目录 一、PEFT介绍二、PEFT 使用2.1 PeftConfig2.2 PeftModel2.3 保存和加载模型 三、PEFT支持任务3.1 Models support matrix3.1.1 Causal Language Modeling3.1.2 Conditional Generation3.1.3 Sequence Classification3.1.4 Token Classification3.1.5 Text-to-Image Ge…

docker 安装hive

记录一下使用docker快速搭建部署hive环境 目录 写在前面 步骤 安装docker 安装docker安装docker-compose配置docker国内镜像源(可选) 安装git & 配置github部署Hive docker-hive开始部署 使用Hive命令行收尾工作 安装vi、lrzsz关闭相关命令 END…