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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于C语言中的类型转换,C++标准创造出了更加可视化的类型转换

目录 前言 一、 C语言中的类型转换 二、为什么C需要四种类型转换 三、C中新增的四种强制类型转换操作符以及它们的应用场景 1.static_cast 2.reinterpret_cast 3.const_cast 4.dynamic_cast 前言 在C语言中&#xff0c;如果赋值运算符左右两侧的类型不同&#xff0c;或者…

短视频矩阵系统贴牌---saas源头开发

一、短视频矩阵运营注意事项&#xff1a; 如&#xff1a;房产行业 短视频矩阵运营是一个系统化的项目&#xff0c;涉及多个平台和账号的管理&#xff0c;以及内容的创作、发布和优化等多个方面。 以下是短视频矩阵运营的注意事项文档的概要以及结果运营数据 一周持续运营量 二…

uni-app 多列picker切换列显示对应内容

html部分&#xff1a; <view class"uni-list"><view class"uni-list-cell"><view class"uni-list-cell-left">选择用户</view><view class"uni-list-cell-db"><picker mode"multiSelector"…

【JavaWeb】网上蛋糕商城后台-类目管理,退出

概念 本文讲解和实现类目管理和管理员的退出功能。 类目列表信息 点击类目管理&#xff0c;向服务器发送请求/admin/type_list 在servlet包中创建AdminTypeListServlet类&#xff0c;获得所有商品分类 package servlet;import model.Type; import service.TypeService;impo…

网站localhost和127.0.0.1可以访问,本地ip不可访问解决方案

部署了一个网站, 使用localhost和127.0.0.1加端口号可以访问, 但是使用本机的ip地址加端口号却不行. 原因可能有多种. 可能的原因: 1 首先要确认是否localhost对应的端口是通的(直接网址访问), 以及你无法访问的那个本机ip是否正确(使用ping测试)&#xff1b; 2 检查本机的防火…

堆的基本操作(c语言实现)

1.堆的基本操作 1.1定义堆 typedef int HPDataType;//堆中存储数据的类型typedef struct Heap {HPDataType* a;//用于存储数据的数组int size;//记录堆中已有元素个数int capacity;//记录堆的容量 }HP;1.2初始化堆 然后我们需要一个初始化函数&#xff0c;对刚创建的堆进行初…

软件测试开发之 职业发展必备 能力模型解析

为什么要了解能力模型 王阳明曾在《传习录》中提到过一个思想&#xff1a;以终为始。所谓“以终为始”&#xff0c;意味着在行动的开始阶段就要考虑到最终的目标和结果&#xff0c;以此来指导自己的行动和选择。那么如果我们想在自己的行业内获取好的职业发展&#xff0c;第一…

Meta更低的训练成本取得更好的性能: 多token预测(Multi-Token Prediction)

Meta提出了一种透过多token预测(Multi-token Prediction)来训练更好、更快的大型语言模型的方法。这篇论文的重点如下: 训练语言模型同时预测多个未来的token,可以提高样本效率(sample efficiency)。 在推论阶段,使用多token预测可以达到最高3倍的加速。 论文的主要贡献包括: …

2024年Delphi自学培训网络资源

概述 Delphi 是一种基于 Object Pascal 的面向对象编程语言。最初&#xff0c;Delphi 是作为构建 Windows 应用程序的工具而创建的&#xff0c;并于 1995 年发布。从那时起&#xff0c;这些技术向前迈出了一大步&#xff0c;Delphi也不例外。尽管第一个用 Delphi 编写的应用程…

Windows 10 中使用 Montreal-Forced-Aligner (MFA) 实现音频和文本强制对齐

文章目录 一、实现目标二、安装 Montreal-Forced-Aligner1、使用 Anaconda 虚拟环境2、修改默认下载路径3、安装 montreal-forced-aligner 及相关第三方包4、验证是否安装成功 三、下载声学模型和发音词典1、命令行方式下载2、手动方式下载 四、强制对齐1、准备音频及对应文本2…

docker学习笔记(三)搭建NFS服务实验

目录 什么是NFS 简单架构​编辑 一.搭建nfs服务器 二.新建共享目录和网页文件 三.设置共享目录 四&#xff1a;创建使用nfs共享目录的卷 五&#xff1a;创建容器使用nfs-web-1卷 六&#xff1a;测试访问 七&#xff1a;是否同步测试 什么是NFS NFS 服务器&#xff1a;ne…

人工智能将改变科研?从胰腺癌早筛到新药研发

去年底英国《自然》杂志刊文预测的2024年十大科学进展中&#xff0c;人工智能的进步和ChatGPT人工智能占据前两位。那么&#xff0c;人工智能对于科学而言&#xff0c;它的哪些成果将带来有益的发展&#xff1f;今天我们请知名科普作者张田勘来聊聊这个话题。 &#xff08;1&am…

万兆以太网MAC设计(13)主机与FPGA之间进行PING

文章目录 前言&#xff1a;一、ICMP校验和计算二、上板效果1、终端命令行1、wireshark捕捉 前言&#xff1a; 在上板尝试进行PING操作的时候&#xff0c;发现一直是请求超时的情况&#xff0c;结果排查发现是首部校验和没有计算的问题。在UDP层&#xff0c;我们不进行校验和是…

ReentrantReadWriteLock源码分析

ReentrantReadWriteLock是基于AQS实现的读写锁&#xff0c;读锁与读锁不互斥、读锁与写锁互斥、写锁与写锁互斥。 类的继承关系 AQS提供了共享和排它两种模式&#xff0c;acquire/release、acquireShared/releaseShared 是AQS里面的两对模板方法。写锁是排它模式基于acquire/…

Yii2 自动生成php代码

文档地址&#xff1a;入门&#xff08;Getting Started&#xff09;: 用 Gii 生成代码&#xff08;Generating Code with Gii&#xff09; - Yii 2.0 权威指南 - 文档 - Yii Framework 中文网 找到配置文件&#xff0c;以我的项目为例&#xff1a; 因为的是开启了路由美化所以访…

在线扭蛋机小程序:商家稳占市场的新突破口

近几年&#xff0c;扭蛋机进入了爆发期&#xff0c;动漫、游戏的发展更是推动了市场的发展&#xff0c;我国扭蛋机正在蓬勃发展中。 不过&#xff0c;在市场规模扩大下&#xff0c;扭蛋机行业的竞争力也在同时加大&#xff0c;企业商家需要在市场竞争中寻求发展新思路&#xf…

开源推荐榜【FunClip是一款完全开源、本地部署的自动化视频剪辑工具】

FunClip是一款完全开源、本地部署的自动化视频剪辑工具&#xff0c;通过调用阿里巴巴通义实验室开源的FunASR Paraformer系列模型进行视频的语音识别&#xff0c;随后用户可以自由选择识别结果中的文本片段或说话人&#xff0c;点击裁剪按钮即可获取对应片段的视频&#xff08;…

基于EBAZ4205矿板的图像处理:12图像二值化(阈值可调)

基于EBAZ4205矿板的图像处理&#xff1a;12图像二值化(阈值可调) 我的项目是基于EBAZ4205矿板的阈值可调的图像阈值二值化处理&#xff0c;可以通过按键调整二值化的阈值&#xff0c;key1为阈值加1&#xff0c;key4为阈值减1&#xff0c;key2为阈值加10&#xff0c;key5为阈值…

【AI+音视频总结】如何在几分钟内用智能工具摘取音视频精华?揭秘下一代学习和内容创作神器!

今天无意发现一个网站&#xff0c;可以一步到位完成AI音视频总结。 我之前对于音视频总结的步骤还是借助 工具下载 剪映来完成的。详情可以参考之前写的一篇文章 【AI应用】模仿爆款视频二次创作短视频操作步骤 。 这里介绍的网站是 BibiGPT 。 BibiGPT AI 音视频助理 - 它是…

构建第一个ArkTS应用之@AppStorage:应用全局的UI状态存储

AppStorage是应用全局的UI状态存储&#xff0c;是和应用的进程绑定的&#xff0c;由UI框架在应用程序启动时创建&#xff0c;为应用程序UI状态属性提供中央存储。 和AppStorage不同的是&#xff0c;LocalStorage是页面级的&#xff0c;通常应用于页面内的数据共享。而AppStora…