jvm重要参数可视化和线上问题排查

news2024/12/23 18:01:13

jvm重要参数可视化和线上问题排查

    • 目标
    • jvm参数
      • 分类(了解)
      • 运行时数据区相关的(jdk1.8)
      • 处理 OOM 相关的
      • 垃圾回收器相关的
      • GC 日志记录相关的
      • 意义,默认值,调优原则(重要, 待拆分)
    • 排查 OOM 流程 和 常见原因
    • 参考文章

目标

  • 熟悉常用的 jvm参数 含义,默认值
  • 了解配置这些默认值的一般原则
  • 线上排查内存溢出的步骤和常见原因分析

jvm参数

分类(了解)

  • 根据jvm参数开头可以区分参数类型,共三类:--X-XX
  • 标准参数(-):所有的JVM实现都必须实现这些参数的功能,而且向后兼容
  • 非标准参数(-X):默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容
    • 例子:Xms20m,-Xmx20m,-Xmn20m
  • 非Stable参数(-XX):此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;
    • 例子:-XX:+PrintGCDetails,-XX:-UseParallelGC,-XX:+PrintGCTimeStamps

运行时数据区相关的(jdk1.8)

在这里插入图片描述

  1. 程序计数器(无参数)
  2. 虚拟机栈(本地方法栈)
    • -Xss: stack size 设置每个线程的栈大小,等同于 -XX:ThreadStackSize
  3. 方法区(元空间)
    • -XX:MetaspaceSize: 设置 Metaspace 的初始(和最小大小)
    • -XX:MaxMetaspaceSize: 设置 Metaspace 的最大大小
    • 1.8 之前使用
      • -XX:PermSize
      • -XX:MaxPermSize
    • 求和
      • 堆内存 = 新生代(Young Generation) + 老年代() ; 新生代 = Eden + S0 + S1
    • -Xms: memory size 设置jvm初始化堆大小
    • -Xmx: memory max 设置jvm初始化堆最大值,等同于 -XX:MaxHeapSize
    • -XX:NewRatio: 设置 新生代 和 老年代 的比例
    • 新生代
      • -XX:SurvivorRatio: 设置 新生代内部的 比例
      • 一共有两种指定 新生代内存(Young Generation)大小的方法
        • 通过 -XX:NewSize-XX:MaxNewSize 指定 初始值和最大值
        • 通过 -Xmn memory new 设置新生代大小,NewSize 与 MaxNewSize 设为一致
    • 老年代
      • -XX:MaxTenuringThreshold: 新生代中对象存活次数,默认15。(若对象在eden区,经历一次MinorGC后还活着,则被移动到Survior区,年龄加1。以后,对象每次经历MinorGC,年龄都加1。达到阀值,则移入老年代)

处理 OOM 相关的

  • 线上环境比配,方便分析内存溢出
    • -XX:+HeapDumpOnOutOfMemoryError
    • -XX:HeapDumpPath=./java_pid<pid>.hprof
  • 了解
    • -XX:OnOutOfMemoryError="< cmd args >;< cmd args >"
    • -XX:+UseGCOverheadLimit

垃圾回收器相关的

  • 埋个坑

GC 日志记录相关的

  • 埋个坑

意义,默认值,调优原则(重要, 待拆分)

  • 虚拟机栈
    • Xss1024k 等同于 -XX:ThreadStackSize=1024k
      • 意义:设置线程栈占用内存大小。

      注意:一般在相同物理内存下,如果减少-xss值会产生更大的线程数,但不同的操作系统对进程内线程数是有限制的,是不能无限生成。

  • 堆内存
    • -Xms2G -Xmx4G
      • 意义:设置堆内存的初始值和最大值。

      建议:通常这两个配置参数相等,可以使得堆相对稳定,避免不停震荡,动态扩容

  • 新生代
    • 方法一: Xmn256m
      • 为 新生代分配 256m 的内存(NewSize 与 MaxNewSize 设为一致)
    • 方法二:-XX:NewSize=256m -XX:MaxNewSize=1024m
      • 设置新生代的初始值和最大值。

      注意:不要将 -mn 和 -mx 设置相等,会导致 没有老年代,进而 oom。 -mn 过小会增加Minor GC频率,过大会减小老年代的大小。一般设为整个堆空间的1/4或1/3.

排查 OOM 流程 和 常见原因

  1. 对于线上环境,设置参数,拿到 oom 时堆内存快照
    1. 线上环境一般不能使用 jdk自带的故障分析工具,需要提前保存 堆内存快照
    2. -XX:+HeapDumpOnOutOfMemoryError
    3. -XX:HeapDumpPath=/app/logs/app.dump
  2. 使用快照分析工具分析 堆内存快照
    1. MAT(Memory Analyzer Tool)
    2. jvisualvm
  3. 常见的问题和原因
    1. java.lang.OutOfMemoryError: Java heap space
      • 首先肯定这是一个堆内存空间引起的问题,可能的原因有:
        1. 内存加载数据量过大
          • 例如不受行数限制的数据库查询语句,或者不限制字节数的文件读取等,事故系统显然没有这些情况;
        2. 内存泄漏(资源未关闭/无法回收)
          • 当系统存在大量未关闭的 IO 资源,或者错误使用ThreadLocal等场景时也会发生OOM,经排查,也不存在这种情况;
        3. 系统内存不足
          • 系统内存不足以支撑当前业务场景所需要的内存,过小的机器内存或者不合理的JVM内存参数。

参考文章

  • https://javaguide.cn/java/jvm/jvm-parameters-intro.html
  • https://javaguide.cn/java/jvm/jvm-in-action.html
  • https://cloud.tencent.com/developer/article/1406848

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

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

相关文章

书生浦语训练营第三次课笔记:XTuner 微调 LLM:1.8B、多模态、Agent

Finetune 简介 两种Finetune范式&#xff1a;增量预训练微调、指令跟随微调 微调数据集 上述是我们所期待模型回答的内容&#xff0c;在训练时损失的计算也是基于这个。 训练数据集看起来是这样&#xff0c;但是真正喂给模型的&#xff0c;是经过对话模板组装后的 下图中&…

tomcat+nginx 动静分离

一、单机反向代理 7-1 7-2 测试 二、多机反向代理 1. 环境准备 机器IP地址服务7-1172.168.1.11nginx7-2172.168.1.12tomcat7-3172.168.1.13tomcat 2. 配置7-1 Nginx 服务器 vim /apps/nginx/conf/nginx.confhttp:upstream tomcat {server 172.168.1.12:8080;server …

优化理论复习——(三)

本篇介绍无约束优化的问题&#xff0c;通过四种算法来进行求解的过程和思路&#xff0c;也是最优化方法中的最重要的一类问题。 无约束优化问题主要是通过迭代搜索算法来切结&#xff0c;比线性规划的计算量都小一点。 目录 无约束优化问题最优性条件最速下降法牛顿法共轭梯度…

Vue踩坑,less与less-loader安装,版本不一致

无脑通过npm i less -D安装less之后&#xff0c;继续无脑通过npm i less-loader -D安装less-loader出现如下错误&#xff1a; 解决方法&#xff1a; 1) npm uninstall less与 npm uninstall less-loader 2) 直接对其版本&#xff1a; npm i less3.0.4 -D npm i less-loader…

渠道管控治理思路建议

品牌在做控价时&#xff0c;一定要有渠道一体化的治理想法&#xff0c;不能只能打击某一家店铺为想法进行治理&#xff0c;比如只打击非授权&#xff0c;只不去管理授权体系的经销商店铺&#xff0c;这显然是不行的&#xff0c;管理非授权的同时&#xff0c;授权也要管理好&…

QT+网络调试助手+TCP客户端

一、网络调试助手UI界面 编程主要思路&#xff1a; 首先将水平的控件 水平布局 &#xff0c;然后相对垂直的控件 垂直布局 &#xff0c;哪怕是底下的groupBox也需要和里面的内容 水平布局&#xff0c;然后最后框选全部 栅格布局。如果需要界面自适应窗口大小&#xff0c…

基于TL431的线性可调恒压恒流电源的Multisim电路仿真设计

1、线性电源的工作原理 在我们日常应用里&#xff0c;直流电是从市电或电网中的交流电获取的。例如15V直流电压源、24V直流电压源等等。交流电变为直流电的过程大概分为一下几步&#xff1a; 首先&#xff0c;交流电通过变压器降低其电压幅值。接着&#xff0c;经过整流电路进…

【Axure高保真原型】拖动穿梭选择器

今天和大家分享拖动穿梭选择器的原型模板&#xff0c;我们可以拖动两个选择器里的选项标签&#xff0c;移动到另外一个选择器里。那这个原型模板是用中继器制作的&#xff0c;所以使用也很方便&#xff0c;只需要在中继器表格里填写选项信息&#xff0c;即可自动生成交互效果&a…

SiteServer 插件之 用户登录插件-用户注册

1、请确保已经安装了“用户登录插件”,如下图。 2、 显示管理->包含文件管理->include/header.html->编辑,如下图。 3、代码如下。 <header><div class="wrap"><div class="top-box clearfix"><div class="left-box…

【AI】openai-quickstart 运行Jupyter Lab

openai-quickstart/openai_api /README-CN.md 【AI】指定python3.10安装Jupyter Lab 可以安装3.10版本的jupyter lab 但是直接输入命令无法启动 突然发现自己电脑2023年安装过anaconda3 C:\ProgramData\anaconda3\python.exe C:\ProgramData\anaconda3\cwp.py C:\ProgramData…

、、、、、

、、 、 transient 关键字总结 1&#xff09;transient修饰的变量不能被序列化&#xff1b;2&#xff09;transient只作用于实现 Serializable 接口&#xff1b;3&#xff09;transient只能用来修饰普通成员变量字段&#xff1b;4&#xff09;不管有没有 transient 修饰&…

ESP32-C3 Wi-Fi STA模式打通(1)

本文内容参考&#xff1a; ESP32 (WIFI)-AP、STA模式(14)_wifi接口 wifi_ap_channel_set-CSDN博客 【ESP-IDF】ESP32利用wifi联网&#xff08;STA模式&#xff09;_esp32ap和sta-CSDN博客 Wi-Fi 库 - ESP32 - — ESP-IDF 编程指南 latest 文档 特此致谢&#xff01; 一、概…

西奥机电食品质构仪与米饭软硬度的口感探秘

西奥机电食品质构仪与米饭软硬度的口感探秘 米饭&#xff0c;作为日常餐桌上的主角&#xff0c;其口感的好坏往往决定了整个用餐体验。其中&#xff0c;米饭的软硬度更是决定其口感的关键。今天&#xff0c;我们将借助西奥机电的食品质构仪&#xff0c;一同探秘米饭软硬度的口…

【mysql】深入探索mysql中的各种约束条件

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

AI大模型探索之路-训练篇15:大语言模型预训练之全量参数微调

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

.Net 8.0 下的新RPC,IceRPC之如何创建连接connection

作者引言 很高兴啊&#xff0c;我们来到了IceRPC之如何创建连接connection,基础引导&#xff0c;让自已不在迷茫&#xff0c;快乐的畅游世界。 如何创建连接connection 学习如何使用IceRPC&#xff0c;创建和接受连接。 连接有什么用途&#xff1f; 连接在 IceRPC 中发挥着核心…

深度学习中的注意力机制一(Pytorch 15)

一 简介 灵长类动物的视觉系统接受了大量的感官输入&#xff0c;这些感官输入远远超过了大脑能够完全处理的程度。然而&#xff0c; 并非所有刺激的影响都是相等的。意识的聚集和专注使灵长类动物能够在复杂的视觉环境中将注意力引向感 兴趣的物体&#xff0c;例如猎物和天敌。…

Baidu Comate智能代码助手-高效代码编程体验

关于Baidu Comate智能代码助手 智能代码助手简介 代码助手可以快速的帮我们补充代码&#xff0c;修改代码&#xff0c;添加注释&#xff0c;翻译中英文&#xff0c;起变量函数名字等操作&#xff0c;十分的友好&#xff0c;这类代码助手现阶段有较多的产品&#xff0c;比如&a…

深度学习-线性回归+基础优化算法

目录 线性模型衡量预估质量训练数据参数学习训练损失最小化损失来学习参数显式解 总结基础优化梯度下降选择学习率 小批量随机梯度下降选择批量大小 总结线性回归的从零开始实现实现一个函数读取小批量效果展示这里可视化看一下 线性回归从零开始实现线性回归的简洁实现效果展示…

【C++】学习笔记——vector_3

文章目录 七、vector3. vector的模拟实现4. vector实现代码整合 未完待续 七、vector 3. vector的模拟实现 上篇文章我们讲解了非常 玄幻 的拷贝构造函数&#xff0c;同样的方法&#xff0c;我们也能用这种方法来实现 赋值重载函数 。 void swap(vector<T>& v) {s…