OOM问题小例子及思考

简介: 前段时间朋友新进入一个公司,遇到线上系统cpu飙高,内存占满情况;和他交流过后有了本篇总结,该博文会以一个简单的小例子来演示oom,以及通过输出dump文件,最后用可视化工具进行分析定位具体oom的代码。

一、背景介绍


前段时间朋友新进入一个公司,遇到线上系统cpu飙高,内存占满情况;和他交流过后有了本篇总结,该博文会以一个简单的小例子来演示oom,以及通过输出dump文件,最后用可视化工具进行分析定位具体oom的代码。


二、思路&方案


  • 1.编写小例子,执行死循环一直给map中赋值
  • 2.启动设置初始内存和最大内存值(这里要设置的小一点)
  • 3.启动命令中通过设置参数将dump文件输出到指定目录中(windows和linux的目录有区别需要注意)
  • 4.执行调用,通过可视化工具查看dump文件
  • 5.分析dump文件,找到oom的具体代码行,进行调整和修改;最终修复上线


三、过程



  • 2.启动命令:

java -jar -Xms32M -Xmx32M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=F:// testdumpfile-1.0-SNAPSHOT.jar


  • 3.执行调用:


c730981e16d646969d7bdb43c9d07691.png


  • 4.通过jdk自带的工具查看dump文件;

4.1.找到本机中jdk的bin目录下的jvisualvm.exe,双击打开

4.2.通过如下截图选择dump文件


be2b78feac8e45b19555eb17caf4c8fd.png


4.3.展示分析结果,找到具体出现oom的代码行


d00b9cc9e0bb42b694c8a3b67aa99820.png


  • 5.如果程序正在启动可通过如下方式输出dump文件

5.1.获取应用的pid

使用ps -ef | grep java查询服务器上的java应用进程信息,找到应用进程及id

5.2.使用jmap获取dump信息

jmap -dump:live,format=b,file=/home/app/dump.hprof 19756

注:/home/app/表示生成的dump文件的存放地址及文件名,自己定义存放位置,19756表示1中查询到的应用pid


四、总结


1.通过该例子执行,训练了自己对于出现问题以及如何排查问题的闭环执行

2.实践出真理,又一次验证了万事万物必有根源,顺藤摸瓜终究能处理掉问题

3.该方式建议在测试环境中通过一定的测试手段将该问题提前发现提前解决

4.在开发中不能将资源想象成无限的;要在有限的资源中做到最大的效率


五、升华


任何事情的出现一定有相关参与人需要极力去提升的地方,那么:找到问题——>解决问题——>思考根源——>规避问题——>落实规避效果 就显得尤为重要了。

希望读者朋友也能够在自己人生路上不断规避这样的问题,让自己走的更快飞得更高。


考文章:

https://blog.csdn.net/weixin_43861049/article/details/95043077

https://blog.csdn.net/weixin_42661074/article/details/86525119

相关文章
|
机器学习/深度学习 数据可视化 算法
机器学习系列7 基于Python的Scikit-learn库构建逻辑回归模型
🎄🎄本文中,你将学到逻辑回归的数学原理,使用Seaborn库可视化数据寻找数据间的相关性,并基于Scikit-learn库构建逻辑回归模型预测南瓜颜色。
720 0
|
7月前
|
算法 物联网 Swift
Qwen3 X ModelScope工具链: 飞速训练 + 全面评测
Qwen于近日发布了Qwen3系列模型,包含了各个不同规格的Dense模型和MoE模型。开源版本中,Dense模型基本沿用了之前的模型结构,差别之处在于对于Q和K两个tensor增加了RMSNorm;MoE模型去掉了公共Expert,其他结构基本与前一致。在模型大小上,涵盖了从0.6B到32B(Dense)和235B(MoE)不同的尺寸。
1107 15
|
运维 监控 物联网
【计算巢】网络自动化:简化复杂网络管理的策略
【6月更文挑战第4天】网络自动化借助SDN和NFV技术,提升网络灵活性和响应速度,减少人为错误。通过Python与Netmiko库,可实现网络设备批量配置,提高效率,降低运营成本。此外,网络自动化还应用于监控、故障排查和安全策略实施。在5G和物联网时代,网络自动化的重要性和应用范围将持续扩大,成为现代网络管理的关键。
264 1
【计算巢】网络自动化:简化复杂网络管理的策略
|
数据采集 存储 JavaScript
(2024)豆瓣电影TOP250爬虫详细讲解和代码
这是一个关于如何用Python爬取2024年豆瓣电影Top250的详细教程。教程涵盖了生成分页URL列表和解析页面以获取电影信息的函数。`getAllPageUrl()` 生成前10页的链接,而`getMoiveListByUrl()` 使用PyQuery解析HTML,提取电影标题、封面、评价数和评分。代码示例展示了测试这些函数的方法,输出包括电影详情的字典列表。
1126 3
|
机器学习/深度学习 算法 数据挖掘
【数据挖掘】 GBDT面试题:其中基分类器CART回归树,节点的分裂标准是什么?与RF的区别?与XGB的区别?
文章讨论了梯度提升决策树(GBDT)中的基分类器CART回归树的节点分裂标准,并比较了GBDT与随机森林(RF)和XGBoost(XGB)的区别,包括集成学习方式、偏差-方差权衡、样本使用、并行性、最终结果融合、数据敏感性以及泛化能力等方面的不同。
334 1
|
缓存 监控 Java
【建议收藏】Tomcat 优化总结
以上是V 哥整理的 Tomcat 优化的一些点,希望对你有所帮助,目前Tomcat已更新到11版本,你在项目中是使用哪个版本呢,如果有一些独到的优化策略,欢迎留言告诉我,感谢。
480 0
|
运维 Serverless API
Serverless 应用引擎产品使用合集之如何实现一键迁移Web框架
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
Java API Android开发
Android系统升级A/B分区OTA升级应用层调用UpdateEngine代码
Android系统升级A/B分区OTA升级应用层调用UpdateEngine代码
708 0
|
小程序 Python
python制作一个简易时钟
python制作一个简易时钟
165 0