当前位置: 首页 > news >正文

JVM技术文档--JVM优化思路以及问题定位--JVM可调整参数汇总

阿丹:

        一个优秀的程序员,是因为在线上的排查以及遇到的线上、生产事故较多所以定位问题以及解决问题会比普通程序员快很多,所以一个优秀的程序员要逐渐形成自己的方法论,来完善和解决问题。

我们是如何发现问题的呢?

阿丹常用:

1、使用 Prometheus 监控 JVM

2、使用Arthas来定位和找到具体问题

3、定位到问题进行修改验证

另外一种方式:

1、打印日志

2、获取到对应的dump文件

3、使用MAT工具进行分析

4、定位到问题进行修改验证

补充说明MAT:

MAT(Memory Analyzer Tool)是一款用于Java堆转储分析的强大工具。它可以帮助识别和解决内存泄漏、查找大对象、分析垃圾回收行为等问题。

以下是使用MAT来导入dump文件和进行分析的基本步骤:

  1. 下载和安装MAT:可以从官方网站(https://www.eclipse.org/mat/)下载并安装适用于您操作系统的MAT版本。

  2. 导入dump文件:

    • 打开MAT工具。
    • 在欢迎界面上选择"Open Heap Dump"(打开堆转储)。
    • 在弹出窗口中,选择要导入的dump文件。这可以是.hprof、.phd或IBM格式的.dump文件。
    • 单击"Finish"完成导入。
  3. 分析堆转储文件:

    • 在导入后,MAT会花费一些时间进行分析和索引。
    • 一旦分析完成,您将看到一个“Histogram”(直方图)视图,其中显示了各个类的实例数和内存占用情况。
  4. 探索和分析数据:

    • 使用不同的视图和功能来分析内存使用情况、对象引用关系、内存泄漏等。
    • “Dominators”(支配者)视图可以帮助您找到占用最多内存的对象。
    • "Leak Suspects"(泄漏嫌疑)视图可帮助您识别潜在的内存泄漏问题。

MAT提供了许多功能和视图,涵盖了广泛的堆转储分析需求。您可以通过探索菜单、工具栏和上下文菜单来查看和使用这些功能。

请注意,由于堆转储文件通常很大(数百MB或更大),导入和分析过程可能需要一些时间和系统资源。

那么我们来整理和解决一下这些问题如何解决

这里是一个在线的JVM可调整参数的汇总网站,还是比较全面的。 

Java JVM 参数设置大全

以下是一份详细的JVM参数汇总:

  1. 通用参数:

    • -server:选择JVM运行在服务器模式。
    • -client:选择JVM运行在客户端模式。
    • -version:打印JVM版本信息并退出。
    • -verbose[:class|gc|jni]:启用详细输出,可选项为类加载、垃圾回收或JNI调试。
    • -showversion:打印JVM版本信息并继续执行。
    • -X:显示非标准选项帮助。
    • -ea[:<packagename>...|:<classname>]:启用断言检查。
    • -da[:<packagename>...|:<classname>]:禁用断言检查。
  2. 堆相关参数:

    • -Xmx<size>:设置最大堆内存大小。
    • -Xms<size>:设置初始堆内存大小。
    • -Xmn<size>:设置新生代大小。
    • -XX:NewSize=<size>:设置新生代初始大小。
    • -XX:MaxNewSize=<size>:设置新生代最大大小。
    • -XX:SurvivorRatio=<ratio>:设置Eden区与Survivor区的比率。
    • -XX:MaxTenuringThreshold=<threshold>:设置对象晋升到老年代的年龄阈值。
  3. GC(垃圾回收)相关参数:

    • -XX:+UseSerialGC:使用串行垃圾回收器。
    • -XX:+UseParallelGC:使用并行垃圾回收器。
    • -XX:+UseConcMarkSweepGC:使用CMS(并发标记清除)垃圾回收器。
    • -XX:+UseG1GC:使用G1(Garbage First)垃圾回收器。
    • -XX:MaxGCPauseMillis=<milliseconds>:设置最大垃圾收集停顿时间。
    • -XX:GCTimeRatio=<n>:设置垃圾回收时间与应用程序执行时间的比率。
    • -XX:+ExplicitGCInvokesConcurrent:明确调用System.gc()时触发并发GC。
  4. 类加载参数:

    • -XX:+TraceClassLoading:跟踪类加载过程。
    • -XX:+TraceClassUnloading:跟踪类卸载过程。
    • -XX:+TraceClassResolution:跟踪类解析过程。
  5. JIT(即时编译器)相关参数:

    • -XX:+TieredCompilation:启用分层编译。
    • -XX:+PrintCompilation:输出已编译方法的日志信息。
  6. 线程相关参数:

    • -Xss<size>:设置线程栈大小。
    • -XX:ThreadStackSize=<size>:设置线程栈大小。

接下来我将记录一下一种经常出现的问题以及它们的优化思路

在JVM在线上环境中,可能会出现以下常见的报错和问题:

  1. 内存相关问题:

    • OutOfMemoryError:表示JVM无法分配更多的内存,可能是由于堆或永久代空间不足导致。
    • PermGen Space错误(JDK 8之前)或Metaspace错误(JDK 8及更高版本):表示永久代(JDK 8之前)或元空间(JDK 8及更高版本)已满。这通常是因为动态生成类太多或者加载的类太多,导致永久代或元空间不足。
  2. 垃圾回收相关问题:

    • Full GC过长:当垃圾回收需要大量时间时,可能会导致系统停顿或性能下降。
    • GC Overhead Limit Exceeded:当垃圾回收所占用的CPU时间超过一定比例时,JVM会抛出此错误。
  3. 线程相关问题:

    • Deadlock(死锁):两个或多个线程相互等待对方释放资源,导致程序无法继续执行。
    • Thread starvation(线程饥饿):某些线程无法获得足够的CPU时间或资源,导致长时间处于等待状态。
  4. 类加载问题:

    • ClassNotFoundException:JVM无法找到特定的类。
    • NoClassDefFoundError:类在编译时存在,但在运行时无法找到。
  5. 并发问题:

    • Race Condition(竞态条件):多个线程同时访问共享资源,导致数据不一致或错误。
    • Synchronization errors(同步错误):使用不正确的同步机制可能导致死锁、饥饿或性能下降。
  6. 其他常见问题:

    • StackOverflowError:递归调用过深,导致栈溢出。
    • NullPointerException:尝试使用空引用对象。

以上只是一些常见的问题和报错。由于JVM的复杂性和灵活性,实际上可能会遇到各种其他问题和异常。解决这些问题需要详细的日志分析、监控和调优技巧。因此,在生产环境中,建议进行合适的监控和日志记录,以便及时发现和解决潜在的问题。

上面这些问题都可以使用我前面提供的解决方案1,就是使用普罗米修斯来监控预警。然后通过具体的阿尔萨斯来解决这些问题。

相关文章:

JVM技术文档--JVM优化思路以及问题定位--JVM可调整参数汇总

阿丹&#xff1a; 一个优秀的程序员&#xff0c;是因为在线上的排查以及遇到的线上、生产事故较多所以定位问题以及解决问题会比普通程序员快很多&#xff0c;所以一个优秀的程序员要逐渐形成自己的方法论&#xff0c;来完善和解决问题。 我们是如何发现问题的呢&#xff1f; …...

Oracle10g数据库迁移方案

试验了很多次Oracle数据库迁移才成功&#xff0c;贴出来给大家参考一下&#xff0c;我看到有的地方写迁移之后还需要重新建立temp表空间&#xff0c;这个还没有研究。另外说一点的是两个数据库的版本一定要一致&#xff0c;之前失败过一次&#xff0c;就是因为两个数据库的版本…...

备忘录模式:对象状态的保存与恢复

欢迎来到设计模式系列的第十八篇文章&#xff0c;本篇将介绍备忘录模式。备忘录模式是一种行为型设计模式&#xff0c;它允许在不破坏封装性的前提下捕获一个对象的内部状态&#xff0c;并在之后恢复该状态。这种模式通常用于需要提供撤销操作的情况。 什么是备忘录模式&#…...

C# InvokeRequired线程安全

C# InvokeRequired线程安全 为了保证新家的线程可能要对主界面的控件元素的属性发生一些改变&#xff0c;此时防止此操作对于主线程的影响&#xff0c;就提出了 InvokeRequired方法&#xff0c;保证主线程的安全&#xff0c;同时新加的线程也可以改变主页面中元素的值。 定义…...

pdf怎么转成jpg图片格式

pdf怎么转成jpg图片格式&#xff1f;对于大家平时在工作或者生活中的图片使用习惯&#xff0c;经常需要将各种格式的文件转换成易于浏览和使用的JPG格式图片以便保存。如今&#xff0c;因为pdf文件具有更强的稳定性和设备兼容性&#xff0c;PDF文件在平时的电脑使用过程中可以说…...

React +ts + babel+webpack

babel babel/preset-typescript 专门处理ts "babel/cli": "^7.17.6", "babel/core": "^7.17.8", "babel/preset-env": "^7.16.11", "babel/preset-react": "^7.16.7", "babel/preset…...

红队专题-REVERSE二进制逆向反编译

红队专题 招募六边形战士队员IDA pro安装python2加入环境变量py2安装pip安装IDA 7.0 proIDAPython: importing "site" failed. 招募六边形战士队员 一起学习 代码审计、安全开发、web攻防、逆向等。。。 私信联系 IDA pro 安装python2 python-2.7.3.msi 加入环…...

Spring技术原理之Bean生命周期原理解析

Spring技术原理之Bean生命周期原理解析 Spring作为Java领域中的优秀框架&#xff0c;其核心功能之一是依赖注入和生命周期管理。其中&#xff0c;Bean的生命周期管理是Spring框架中一个重要的概念。在本篇文章中&#xff0c;我们将深入探讨Spring技术原理中的Bean生命周期原理…...

Unity实现设计模式——模板方法模式

Unity实现设计模式——模板方法模式 模板模式(Template Pattern)&#xff0c; 指在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现&#xff0c;但调用将以抽象类中定义的方式进行。 简单说&#xff0c; 模板方法模式定义一个操作中的算法的骨架&…...

C++实现高性能内存池(二)

文章目录 一、设计内存池二、实现MemoryPool::construct() 实现MemoryPool::deallocate() 实现MemoryPool::~MemoryPool() 实现MemoryPool::allocate() 实现三、与 std::vector 的性能对比一、设计内存池 在上节中,我们在模板链表栈中使用了默认构造器来管理栈操作中的元素内…...

沪深300期权一个点多少钱?

经中国证监会批准&#xff0c;深圳证券交易所于2019年12月23日上市嘉实沪深300ETF期权合约品种。该产品是以沪深300为标的物的嘉实沪深300ETF交易型指数基金为标的衍生的标准化合约&#xff0c;下文介绍沪深300期权一个点多少钱?本文来自&#xff1a;期权酱 一、沪深300期权涨…...

怎么防止重要文件夹丢失?文件夹安全如何保护?

我们在使用电脑的过程中&#xff0c;会将重要数据放在文件夹中&#xff0c;那么&#xff0c;我们该怎么防止重要文件夹丢失呢&#xff1f;下面我们就一起来了解一下。 EFS加密 EFS加密可以对于NTFS卷上的文件夹进行加密&#xff0c;加密后的文件夹将只允许加密时登录系统的用户…...

用于物体识别和跟踪的下游任务自监督学习-1-引言

一&#xff1a;引言&#xff1a; 图像和视频理解是计算机视觉应用中的基本问题&#xff0c;旨在使机器能够像人类一样解释和理解视觉数据。这些问题涉及识别图像和视频中的对象、人物、动作、事件和场景。如图1.1-&#xff08;a&#xff09;所示的图像识别任务包括对象检测[1]…...

式子表达ds类——多用位置/值域表示未知数+区间覆盖转区间加:CF407E

https://www.luogu.com.cn/problem/CF407E 多用位置/值域表示未知数 推出的式子中 n n n 表示长度&#xff0c;应该直接换成 r − l 1 r-l1 r−l1 区间覆盖转区间加 推出的式子有 m x , m n mx,mn mx,mn&#xff0c;朴素思路是用单调队列区间覆盖维护 那样就不能很方便…...

Python 实现秒表功能(比较好玩的题目)

以下实例使用 time 模块来实现秒表功能&#xff1a; import time print(按下回车开始计时&#xff0c;按下ctrlc停止计时) while True:input("")starttimetime.time()print(开始)try:while True:print(计时&#xff1a;,round(time.time()-starttime,0),秒)time.sle…...

DALL-E 3调参教程;百度新出的AI写小说神器;通义听悟看播客也太爽了;系列博文带你理解生成式AI | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f525; 2023年诺贝尔奖全部揭晓&#xff0c;一文看完6类奖项花落谁家 https://www.nobelprize.org/prizes 随着最后一项「经济学奖」的揭秘&a…...

设计模式-享元模式

概念 共享内存&#xff08;主要考虑内存&#xff0c;而非效率&#xff09;相同的数据&#xff0c;共享使用&#xff08;JS中未找到经典应用场景&#xff09; 演示 <!-- 无限下拉列表&#xff0c;将事件代理到高层节点上 --> <!-- 如果都绑定到<a>标签&#x…...

中秋时节赏明月,五子棋戏月饼趣 — Flutter中秋限定版五子棋

前言 当中秋时节来临&#xff0c;我们都期待着与亲人朋友共度这个美好的节日。这个时候&#xff0c;除了传统的赏月和品尝美味的月饼&#xff0c;我还有一个特别的建议——尝试一款有趣的Flutter五子棋游戏&#xff01;这款五子棋游戏以中秋为主题&#xff0c;游戏的棋子也可爱…...

Scala第十九章节

Scala第十九章节 scala总目录 文档资料下载 章节目标 了解Actor的相关概述掌握Actor发送和接收消息掌握WordCount案例 1. Actor介绍 Scala中的Actor并发编程模型可以用来开发比Java线程效率更高的并发程序。我们学习Scala Actor的目的主要是为后续学习Akka做准备。 1.1 Ja…...

kafka与hbase的区别

Kafka 和 HBase 是两个不同的分布式数据存储系统&#xff0c;它们可以在大数据应用中发挥不同的作用。 Kafka 是一个高吞吐量的分布式发布订阅消息系统&#xff0c;主要用于处理实时数据流。它具有以下特点&#xff1a; 高性能&#xff1a;Kafka 能够以非常高的吞吐量和低延迟…...

免费音频编辑终极指南:Audacity如何让专业音频处理变得简单

免费音频编辑终极指南&#xff1a;Audacity如何让专业音频处理变得简单 【免费下载链接】audacity Audio Editor 项目地址: https://gitcode.com/GitHub_Trending/au/audacity 还在为音频编辑软件的高昂价格而烦恼&#xff1f;是否曾因复杂的音频工具而放弃创作&#x…...

Windows 10系统优化深度指南:使用Win10BloatRemover打造高效工作环境

Windows 10系统优化深度指南&#xff1a;使用Win10BloatRemover打造高效工作环境 【免费下载链接】Win10BloatRemover Configurable CLI tool to easily and aggressively debloat and tweak Windows 10 by removing preinstalled UWP apps, services and more. Originally bas…...

PowerPoint插件latex-ptt安装踩坑全记录:从‘无法下载’到‘点击报错’的保姆级排雷指南

LaTeX公式输入神器latex-ppt插件安装与排雷全攻略 在学术报告、技术分享或教学演示中&#xff0c;数学公式的呈现质量直接影响专业形象。虽然PowerPoint作为主流演示工具广受欢迎&#xff0c;但其原生公式编辑器功能有限&#xff0c;无法满足科研工作者对LaTeX公式排版的需求。…...

Cadence Allegro 17.4 实战:阻抗控制与高速PCB设计的关键几步(以50欧姆匹配为例)

Cadence Allegro 17.4 实战&#xff1a;阻抗控制与高速PCB设计的关键几步&#xff08;以50欧姆匹配为例&#xff09; 在高速PCB设计中&#xff0c;阻抗控制是确保信号完整性的核心环节。当信号频率超过100MHz或上升时间短于1ns时&#xff0c;传输线效应开始显现&#xff0c;此时…...

ARM Cortex-A9 MPCore多核处理器架构与优化实践

1. ARM Cortex-A9 MPCore硬件架构概述ARM Cortex-A9 MPCore是一款广泛应用于嵌入式系统的高性能多核处理器。作为ARMv7-A架构的代表性产品&#xff0c;它在工业控制、汽车电子和消费电子等领域有着广泛应用。这款处理器最显著的特点是支持1-4个核心的对称多处理(SMP)配置&#…...

用STM32F103和AD9833制作一个简易信号源:从电路搭建、驱动编写到波形测试全记录

用STM32F103和AD9833打造高精度信号发生器&#xff1a;硬件设计、固件开发与波形优化全解析 在电子工程和嵌入式开发领域&#xff0c;信号发生器是不可或缺的基础工具。无论是测试滤波器响应、校准传感器&#xff0c;还是验证通信协议&#xff0c;一个稳定可靠的信号源都能显著…...

掌握kotlin-android-template:Gradle Kotlin DSL配置终极指南

掌握kotlin-android-template&#xff1a;Gradle Kotlin DSL配置终极指南 【免费下载链接】kotlin-android-template Android Kotlin Github Actions ktlint Detekt Gradle Kotlin DSL buildSrc ❤️ 项目地址: https://gitcode.com/gh_mirrors/ko/kotlin-android-tem…...

HsMod终极指南:如何通过55项功能全面优化炉石传说游戏体验

HsMod终极指南&#xff1a;如何通过55项功能全面优化炉石传说游戏体验 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是基于BepInEx框架开发的炉石传说模改插件&#xff0c;专为提升…...

Wonder3D完整解决方案:从单张图片到高质量3D模型的5步实施路径

Wonder3D完整解决方案&#xff1a;从单张图片到高质量3D模型的5步实施路径 【免费下载链接】Wonder3D Single Image to 3D using Cross-Domain Diffusion for 3D Generation 项目地址: https://gitcode.com/gh_mirrors/wo/Wonder3D 面对传统3D建模复杂耗时、学习曲线陡峭…...

音乐学者必看的NotebookLM冷启动指南,从乐谱OCR识别到和声进行语义建模,一步到位

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM在音乐学研究中的范式革命 NotebookLM&#xff08;由Google Research推出的基于用户上传文档的AI助手&#xff09;正悄然重塑音乐学研究的方法论边界。它不再依赖通用知识库的模糊匹配&#…...