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

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

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

相关文章

【除了协程还有哪些方式可以实现异步编程】

在Unity中&#xff0c;除了使用协程实现异步编程外&#xff0c;还有以下几种方法&#xff1a; 异步加载资源&#xff1a; 使用UnityWebRequest类进行异步加载资源&#xff0c;这在加载网络资源或动态加载资源时非常有用。 using UnityEngine; using UnityEngine.Networking;…

基于OpenCv的图像特征点检测

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

C语言/数据结构——(用双链表实现数据的增删查改)

一.前言 嗨嗨嗨&#xff0c;大家好久不见&#xff01;前面我们已经通过数组实现数据的增删查改、单链表实现数据的增删查改&#xff0c;现在让我们尝试一下使用双链表实现数据的增删查改吧&#xff01; 二.正文 如同往常一样&#xff0c;对于稍微大点的项目来说&#xff0c;…

【工程记录】Python爬虫入门记录(Requests BeautifulSoup)

目录 写在前面1. 环境配置2. 获取网页数据3. 解析网页数据4. 提取所需数据4.1 简单提取4.2 多级索引提取 5. 常见问题 写在前面 仅作个人学习与记录用。主要整理使用Requests和BeautifulSoup库的简单爬虫方法。在进行数据爬取时&#xff0c;请确保遵守相关法律法规和网站的服务…

FLIR LEPTON3.5 热像仪wifi 科研实验测温采集仪

点击查看详情!点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情 1、描述 这是一款桌面科研实验测温热成像多功能热像记录仪&#xff0c;小巧轻便…

SFOS1:开发环境搭建

一、简介 最近在学习sailfish os的应用开发&#xff0c;主要内容是QmlPython。所以&#xff0c;在开发之前需要对开发环境&#xff08;virtualBox官方SDKcmake编译器python&#xff09;进行搭建。值得注意的是&#xff0c;我的开发环境是ubuntu22.04。如果是windows可能大同小异…

带文字海报流程自动化

上一篇文章&#xff1a; 带文字海报流程自动化 - 知乎 项目代码整理在&#xff1a; https://github.com/liangwq/Chatglm_lora_multi-gpu​github.com/liangwq/Chatglm_lora_multi-gpu 根据用户的输入生成图片prompt模块代码封装&#xff1a; from openai import OpenAI im…

获取淘宝商品销量数据接口

淘宝爬虫商品销量数据采集通常涉及以下几个步骤&#xff1a; 1、确定采集目标&#xff1a;需要明确要采集的商品类别、筛选条件&#xff08;如天猫、价格区间&#xff09;、销量和金额等数据。例如&#xff0c;如果您想了解“小鱼零食”的销量和金额&#xff0c;您需要设定好价…

【云原生系列】云计算概念与架构设计介绍

1 什么是云计算 云计算是一种基于互联网的计算模式&#xff0c;在这个模式下&#xff0c;各种计算资源&#xff08;例如计算机、存储设备、网络设备、应用程序等&#xff09;可以通过互联网实现共享和交付。云计算架构设计的主要目标是实现高效、可扩展、可靠、安全和经济的计算…

C++多态特性详解

目录 概念&#xff1a; 定义及实现&#xff1a; 虚函数重写的两个例外&#xff1a; 1.协变&#xff1a; 2.析构函数的重写&#xff1a; final关键字&#xff1a; override关键字&#xff1a; 多态是如何实现的&#xff08;底层&#xff09;&#xff1a; 面试题&#xff1…

idea No versioned directories to update were found

idea如何配置svn以及svn安装时需要注意什么 下载地址&#xff1a;https://112-28-188-82.pd1.123pan.cn:30443/download-cdn.123pan.cn/batch-download/123-820/3ec9445a/1626635-0/3ec9445a25ba365a23fc433ce0c16f34?v5&t1714358478&s171435847804276f7d9249382ba512…

代码随想录算法训练营DAY40\DAY41|C++动态规划Part.3|343.整数拆分、96.不同的二叉搜索树

DAY40休息日&#xff0c;本篇为DAY41的内容 文章目录 343.整数拆分思路dp含义递推公式&#xff08;难点&#xff09;初始化遍历顺序打印 CPP代码数学方法归纳证明法 96.不同的二叉搜索树思路dp含义递推公式初始化遍历顺序打印 CPP代码题目总结 343.整数拆分 力扣题目链接 文章…

小蓝本--因式分解(习题1)讲解

这几天要备战期中&#xff0c;下一期可能要等暑假了...... 小升初的压力真是紧扣于头啊&#xff0c;为了分到一个好班&#xff0c;拼了&#xff01; 对了&#xff0c;下一期可能在寒假更&#xff0c;见谅&#xff01; 1分解因式&#xff1a; 公因式&#xff1a; 答案&#xff…

vue3--element-plus-抽屉文件上传和富文本编辑器

一、封装组件 article/components/ArticleEdit.vue <script setup> import { ref } from vue const visibleDrawer ref(false)const open (row) > {visibleDrawer.value trueconsole.log(row) }defineExpose({open }) </script><template><!-- 抽…

iptables---防火墙

防火墙介绍 防火墙的作用可以理解为是一堵墙&#xff0c;是一个门&#xff0c;用于保护服务器安全的。 防火墙可以保护服务器的安全&#xff0c;还可以定义各种流量匹配的规则。 防火墙的作用 防火墙具有对服务器很好的保护作用&#xff0c;入侵者必须穿透防火墙的安全防护…

排序算法--快速排序

前提&#xff1a; 快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据都比另外一部分的所有数据都要小&#xff0c;然后再按此方法对这两部分…

【Leetcode每日一题】 综合练习 - 全排列 II(难度⭐⭐)(71)

1. 题目解析 题目链接&#xff1a;47. 全排列 II 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 算法思路梳理 为了生成给定数组nums的全排列&#xff0c;同时避免由于重复元素导致的重复排列&#xff0c;我们可以遵…

快速上手RabbitMQ

安装RabbitMQ 首先将镜像包上传到虚拟机&#xff0c;使用命令加载镜像 docker load -i mq.tar 运行MQ容器 docker run \-e RABBITMQ_DEFAULT_USERitcast \-e RABBITMQ_DEFAULT_PASS123321 \-v mq-plugins:/plugins \--name mq \--hostname mq \-p 15672:15672 \-p 5672:5672 …

如何使用 GPT API 从 PDF 出版物导出研究图表?

原文地址&#xff1a;how-to-use-gpt-api-to-export-a-research-graph-from-pdf-publications 揭示内部结构——提取研究实体和关系 2024 年 2 月 6 日 介绍 研究图是研究对象的结构化表示&#xff0c;它捕获有关实体的信息以及研究人员、组织、出版物、资助和研究数据之间的关…

brpc profiler

cpu profiler cpu profiler | bRPC MacOS的额外配置 在MacOS下&#xff0c;gperftools中的perl pprof脚本无法将函数地址转变成函数名&#xff0c;解决办法是&#xff1a; 安装standalone pprof&#xff0c;并把下载的pprof二进制文件路径写入环境变量GOOGLE_PPROF_BINARY_PA…