定位及解决OOM

news2025/1/11 10:13:19

一、定义

内存溢出:OutOfMemoryError,是指因内存不够,导致操作新对象没有剩余空间。会导致频繁fullgc出现STW从而导致性能下降。

内存泄漏:指用malloc或new申请了一块内存,但是没有通过free或delete将内存释放,导致这块内存一直处于占用状态。

二、主要外在体现

  • 应用程序长时间连续运行时性能下降;
  • CPU使用率高,甚至到100%;
  • 频繁fullgc,各种诸如接口超市等报警;
  • 应用程序偶尔会耗尽连接对象;

查看应用程序full gc时间:jstat -gc pid 间隔时间 显示次数:

三、造成OOM的原因

  • 一次性申请的对象太多。比如查数时表数据太多一次性到内存中处理,需要定位到具体的代码再优化;
  • 内存资源耗尽未释放。比如一些连接、线程等,应用完后释放,且用线程池的概念;
  • 本身资源不够。本身要处理一些日常的大对象工作,可以用jmap -heap 可以查看服务资源情况。

jmap -heap命令界面

四、定位OOM

1、系统已经OOM宕机

1.1、提前设置JVM参数

-XX:+HeapDumpOnOutOfMemoryError - XX:HeapDumpPath

在java程序启动时在jvm参数增加OOM时到处dump文件的命令,在应用发生OOM后会导出一个堆的dump文件到指定目录。需要在启动服务时设置参数,如果事前没有设置,出现OOM宕机后会无据可查。文件会比较大,因为会记录系统运行过程中所有的对象的信息,所以要保证磁盘空间较大。

java -Xms10M -Xmx10M -XX:+HeapDumpOnOutOfMemoryError - XX:HeapDumpPath=xxx -jar

1.2、工具:

visualvm:载入文件时,要注意文件类型是dump文件。主要看类目录下找到占内存最大且是自己开发创建的实例。双击进入后,随便定位其中一个实例,引用下找到GC Root,单击右键选择在线程中显示,就可以定位到具体的代码位置了。

2、运行中还未OOM

2.1、导出dump文件

jmap -dump:fromat=b,file=xxx.hprof 进程号(jps查看进程号);

导出OOM dump文件会导致一次full gc,会造成一次STW,所以是接收到频繁full gc或内存过高的告警后,为排查问题时快速定位OOM才去操作。

2.2、Arthas工具线上诊断。

可参考链接:Java诊断工具-Arthas保姆级教程_arthas定位内存泄漏-CSDN博客

2.3、jmap -histo:live 进程ID

会显示最占内存的对象,与dump文件查看实例差不多。

3、结合jvisualvm进行调试

查看最多跟业务有关对象->找到GCROOT->查看线程栈,就可以快速定位业务代码了。

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

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

相关文章

cmd常用指令

cmd全称Command Prompt,中文译为命令提示符。 命令提示符是在操作系统中,提示进行命令输入的一种工作提示符。 在不同的操作系统环境下,命令提示符各不相同。 在windows环境下,命令行程序为cmd.exe,是一个32位的命令…

全域电商数据API接口采集突破堆人头的方式的数据采集实现高效稳定大批量的电商商品数据采集

全域电商,是近几年的新趋势,几乎所有商家都在布局全域,追求全域增长。但商家发现,随着投入成本的上涨,利润却没有增加。 其中最为突出的是——商家为保证全域数据的及时更新,通过堆人头的方式完成每日取数…

vulhub中GitLab 任意文件读取漏洞复现(CVE-2016-9086)

GitLab是一款Ruby开发的Git项目管理平台。在8.9版本后添加的“导出、导入项目”功能,因为没有处理好压缩包中的软连接,已登录用户可以利用这个功能读取服务器上的任意文件。 环境运行后,访问http://your-ip:8080即可查看GitLab主页&#xff0…

cartographer学习与使用

记录一下在配置和使用cartographer建图时遇到的各种问题吧。 我的数据 配置文件&#xff1a; my_rslidar.launch <launch> <param name"/use_sim_time" value"false" /> <!--启动建图节点--> <node name"cartographer_n…

设计模式学习笔记 - 设计原则与思想总结:1.总结回顾面向对象、设计原则、编程规范、重构技巧等知识点

概述 对前面的内容的回顾&#xff0c;温故而知新&#xff0c;包括&#xff1a;面向对象、设计原则、规范与重构三个模块的内容。 1.代码质量评判标准 如何评价代码质量的高低&#xff1f; 代码质量的评价具有很强的主观性&#xff0c;描述代码质量的词汇也有很多&#xff0c…

【人工智能】英文学习材料01(每日一句)

&#x1f33b;个人主页&#xff1a;相洋同学 &#x1f947;学习在于行动、总结和坚持&#xff0c;共勉&#xff01; 目录 1.Natural Language Processing&#xff0c;NLP&#xff08;自然语言处理&#xff09; 2.Machine Learing&#xff0c;ML&#xff08;机器学习&#xf…

R语言:microeco:一个用于微生物群落生态学数据挖掘的R包,第四:trans_beta class

trans_beta class&#xff1a;利用trans_beta类可以变换和绘制beta分集的距离矩阵。该类中涉及到beta多样性的分析主要包括排序、群距、聚类和方差分析。我们首先使用PCoA显示排序。 > dataset$cal_betadiv() The result is stored in object$beta_diversity ... > t1 &…

MySQL-- B+ 树

一、InnoDB 是如何存储数据的&#xff1f; InnoDB 的数据是按「数据页」为单位来读写的 数据库的 I/O 操作的最小单位是页&#xff0c;InnoDB 数据页的默认大小是 16KB 单个数据页的结构及作用 多个数据页之间的逻辑连接&#xff08;双向链表&#xff09;&#xff0c;不需要物…

每周一算法:双向深搜

题目描述 达达帮翰翰给女生送礼物&#xff0c;翰翰一共准备了 N N N 个礼物&#xff0c;其中第 i i i 个礼物的重量是 G [ i ] G[i] G[i]。 达达的力气很大&#xff0c;他一次可以搬动重量之和不超过 W W W的任意多个物品。 达达希望一次搬掉尽量重的一些物品&#xff0c;请…

微信小程序的页面制作---常用组件及其属性

微信小程序里的组件就是html里的标签&#xff0c;但其组件都自带UI风格和特定的功能效果 一、常用组件 view&#xff08;视图容器&#xff09;、text&#xff08;文本&#xff09;、button&#xff08;按钮&#xff09;、image&#xff08;图片&#xff09;、form&#xff08…

记录-gitlab-安装在k8s中的一些注意点

一、已有cert-manager的时候如何配置&#xff1f; 1、首先需要创建一个ClusterIssuer apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata:name: letsencrypt-staging spec:acme:# You must replace this email address with your own.# Lets Encrypt will use thi…

npm包、全局数据共享、分包

使用 npm 包 小程序对 npm 的支持与限制 目前&#xff0c;小程序中已经支持使用 npm 安装第三方包&#xff0c;从而来提高小程序的开发效率。但是&#xff0c;在小程序中使用npm 包有如下 3 个限制&#xff1a; ① 不支持依赖于 Node.js 内置库的包 ② 不支持依赖于浏览器内置…

launchctl及其配置、使用、示例

文章目录 launchctl 是什么Unix / Linux类似的工具有什么哪个更常用配置使用常用子命令示例加载一个 launch agent:卸载一个 launch daemon:列出所有已加载的服务:启动一个服务:停止一个服务:禁用一个服务:启用一个服务: 附com.example.myagent.plist内容有趣的例子参考 launch…

ISIS接口MD5 算法认证实验简述

默认情况下&#xff0c;ISIS接口认证通过在ISIS协议数据单元&#xff08;PDU&#xff09;中添加认证字段&#xff0c;例如&#xff1a;MD5 算法&#xff0c;用于验证发送方的身份。 ISIS接口认证防止未经授权的设备加入到网络中&#xff0c;并确保邻居之间的通信是可信的。它可…

数据结构之顺序存储-顺序表的基本操作c/c++(创建、初始化、赋值、插入、删除、查询、替换、输出)

学习参考博文&#xff1a;http://t.csdnimg.cn/Qi8DD 学习总结&#xff0c;同时更正原博主在顺序表中插入元素的错误。 数据结构顺序表——基本代码实现&#xff08;使用工具&#xff1a;VS2022&#xff09;&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include <stdi…

深度强化学习01

Random variable Probability Density Function 期望 Random Sampling 学习视频 这绝对是我看过最好的深度强化学习&#xff01;从入门到实战&#xff0c;7小时内干货不断&#xff01;_哔哩哔哩_bilibili

macOS Ventura 13.6.5 (22G621) Boot ISO 原版可引导镜像下载

macOS Ventura 13.6.5 (22G621) Boot ISO 原版可引导镜像下载 3 月 8 日凌晨&#xff0c;macOS Sonoma 14.4 发布&#xff0c;同时带来了 macOS Ventru 13.6.5 和 macOS Monterey 12.7.4 安全更新。 macOS Ventura 13.6 及更新版本&#xff0c;如无特殊说明皆为安全更新&…

学习笔记 | 微信小程序项目day02

今日学习内容 安装uni-ui跟uni-helper/uni-ui-types配置pinia持久化请求工具类的拦截器请求工具类的请求函数 安装uni-ui跟uni-helper/uni-ui-types npm install -g cnpm --registryhttps://registry.npmmirror.com npm set registry https://registry.npmmirror.com npm i …

怎么判断发票扫描OCR软件好用不好用?

发票扫描OCR&#xff08;Optical Character Recognition&#xff09;是一种将纸质发票上的文字、数字等信息转化为可编辑的文本格式的技术。在现代企业中&#xff0c;随着数字化转型的推进&#xff0c;发票扫描OCR技术变得越来越重要。然而&#xff0c;面对市场上众多的发票扫描…

ioDraw:与 GitHub、gitee、gitlab、OneDrive 无缝对接,绘图文件永不丢失!

&#x1f31f; 绘图神器 ioDraw 重磅更新&#xff0c;文件保存再无忧&#xff01;&#x1f389; 无需注册&#xff0c;即刻畅绘&#xff01;✨ ioDraw 让你告别繁琐注册&#xff0c;尽情挥洒灵感&#xff01; 新增文件在线实时保存功能&#xff0c;支持将绘图文件保存到 GitHu…