JVM系统优化实践(18):GC生产环境案例(一)

生产环境中,最常见的一种案例就是OOM,也叫「内存溢出」,它表示JVM已经无法支撑业务系统的运行。而很多工程师都没有类似处理线上系统故障的经验,尤其是这种突发的故障。那么:

1、为什么会OOM?(Why)

2、发生什么样的OOM?(What)

3、那个系统发生的OOM?(Who/Where)

4、什么时候发生的OOM?(When)

5、怎么排查和解决OOM?(How)

我们知道,启动一个Java系统,就是启动一个JVM进程。由这个JVM进程来决定如何执行Java代码,一个JVM进程只有一个执行入口:它总是从main方法开始的。

JVM启动后默认的main线程就是专门用于执行main方法的主线程。

1、Metaspace用于存放系统使用到的各种类信息和JDK自身的一些信息(可能发生OOM的地方);

2、每个线程都有自己的栈帧,用于存放各种局部变量(也可能发生OOM的地方);

3、另外,代码创建的各种对象,都会存放到堆内存里(也可能发生OOM的地方)。

所以,总结起来,OOM可能发生的地方包括:

1、Metaspace区

2、栈帧

3、堆内存

可以通过参数来设置Metaspace区的大小,防止产生OOM:

-XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M

Metaspace区大小相对固定,很少出现大的浮动。Metaspace区满了也会触发Full GC,一旦Metaspace无法回收空间且还在不停加载更多数据,就会发生OOM。

Metaspace发生OOM的常见原因有:

1、新手工程师未设置Metaspace区的大小,而是直接使用的默认值;

2、使用的框架用到了cglib之类的技术通过反射动态生成很多附加类,导致Metaspace区被占满。

而栈帧发生OOM的常见原因有:

1、方法发生递归调用时,导致频繁入栈出栈;

2、即便是同一个方法,每一次调用都会产生一个入栈操作,调用完成后又会产生出栈操作。

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

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

相关文章

linux终端前面显示base和不显示base

问题描述:前提是系统里装了anaconda3,有时候两个服务器之间相连长时间没使用或者访问时候前面没显示base。。 解决:我们在做深度学习时需要一个环境,如果前面没显示base的话,你直接conda activate是激活不了我们需要跑…

降级npm后,出现xxx 不是内部或外部命令解决方法

比如我安装了anyproxy npm install anyproxy -g 之后在cmd中输入anyproxy 发现 anyproxy 不是内部或外部命令解决方法. 一般出现这样的问题原因是npm安装出现了问题,全局模块目录没有被添加到系统环境变量。 Windows用户检查下npm的目录是否加入了系统变量P…

实例014 OutLook界面

实例说明 程序主界面包括菜单栏、工具栏、状态栏和树状视图。OutLook界面美观、友好,是一个很实用的程序主界面,并且菜单栏和工具栏是可移动的。运行本例效果如图1.14所示。 图1.14 Out Look界面 技术要点 一般程序的菜单栏和工具栏是不可移动的&…

【观察】杉数科技:释放智能决策“乘数效应”,驱动智能制造高质量增长

毫无疑问,中国制造业在时代背景与国家政策的双重驱动下,正加速向数智化转型,而以数据驱动的智能决策也正成为制造业资源优化配置的“利器”,通过端到端的数据深度感知与决策优化,显然能够将工业和制造业的数据价值发挥…

源码编译nginx支持https

编译openssl 从github下载指定版本的源码 https://github.com/openssl/openssl/releases 下载后解压 tar -zcvf openssl-3.1.1.tar.gz 进入文件夹后配置 cd openssl-3.1.1 && ./Configure --prefix/data/projects/build/openssl-3.1.1 --prefix参数指定路径 执行编译…

Python isalpha()函数详解

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 isalpha 1、包含字母的情况2、包含数字的情况3、包含汉字和其他语言的情况4、空字…

Java面试专栏

Java面试专栏 Java是一门广泛应用于企业级应用开发的编程语言,因此在企业招聘中Java开发人员的需求非常大。如果你正在准备Java面试,以下是一些常见的Java面试问题和答案,希望能帮助你更好地准备面试。 Java基础 JDK和JRE的区别是什么&…

Ribbon IPing机制源码探秘

🍊 Java学习:社区快速通道 🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想 🍊 绝对不一样的职场干货:大厂最佳实践经验指南 📆 最近更新:2023年7月2日 🍊 点…

为啥离不了 linux

Linux与Windows都是十分常见的电脑操作系统,相信你对它们二者都有所了解!在你的使用过程中,是否有什么事让你觉得在Linux上顺理成章,换到Windows上就令你费解?亦或者关于这二者你有任何想要分享的,都可以在…

DAPP(七)——React与智能合约的架构整合

合并一下react和智能合约,创建react脚手架 create-react-app myapp 将合约中对应的文件 复制到 react脚手架的根目录中 结果如下: 下载合约所要的依赖: npm i openzeppelin-solidity 可以在脚手架终端执行truffle的命令语句,t…

AIGC文生图:使用ControlNet 控制 Stable Diffusion

1 ControlNet介绍 1.1 ControlNet是什么? ControlNet是斯坦福大学研究人员开发的Stable Diffusion的扩展,使创作者能够轻松地控制AI图像和视频中的对象。它将根据边缘检测、草图处理或人体姿势等各种条件来控制图像生成。 论坛地址:Adding…

Unity 编辑器-查找所有未被使用的Prefab

需求 接到一个需求,将Res里所有特效相关的prefab检查一下,没有使用的移除。 分析 先拆解一下需求,如下 #mermaid-svg-YiTzyE1BvQ0ZTgLj {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#merm…

android editText获取不到数据

问题分析:在onActivityCreated一开始就创建了findViewById,这时获取的是默认值,需要在点击按钮时重新加载才能获取到输入数据。 需要在点击按钮时重新加载数据:

React 中使用高阶函数

React 中使用高阶函数 随着前端技术的快速发展,React 作为一种流行的 JavaScript 库,被广泛应用于 Web 开发中。在 React 中,高阶函数被引入作为一种强大的工具,用于增强组件的复用性和可维护性。本论文将介绍 React 中使用高阶函…

大坝安全监测中需要做好检查监测

大坝安全监测是人们了解大坝运行状态和安全状况的有效手段和方法。它的目的主要是了解大坝安全状况及其发展态势,是一个包括由获取各种环境、水文、结构、安全信息到经过识别、计算、判断等步骤,最终给出一个大坝安全 程度的全过程。 此过程包括&#xf…

初识stm32

1、什么是单片机? 单片机(Single-Chip Microcomputer)是一种集成电路芯片,把具有数据处理能力的中央处 理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功 能(可能还包括显示驱动电路、…

华为云流水线CodeArts Pipeline怎么样?能实现哪些功能?

华为云流水线服务CodeArts Pipeline,旨在提升编排体验,开放插件平台,并提供标准化的DevOps企业治理模型,将华为公司内的优秀研发实践赋能给伙伴和客户。 灵活编排、高效调度 开放流水线插件 内置企业DevOps研发治理模型 体验通…

【工业机器人】用于轨迹规划和执行器分析的机械手和移动机器人模型(MatlabSimulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

C. Strong Password

Problem - C - Codeforces 思路:根据题意我们能够知道就是对于每一位都要再区间范围内,并且不是s的子序列,我们先看第一位,第一位有l[1]-r[1]这几种选择,假如说某一种选择在s中没有那么我们就选择以这个开头的作为答案…

python_股票增加控制人与流通股东等筛选条件

目录 写字前面: 结果展示 获取数据 行业数据 控制人数据 十大流通股东数据 开始合并 1 从行业数据中提取证券股的行业数据 2 合并控制人数据 3 合并十大流通股东 4 把三个结果按列合并 写字前面: 在分析数据的时候,常常需要的字段…