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

相关文章
|
应用服务中间件 Linux 网络安全
Linux 安装 Nginx 并配置为系统服务(超详细)
Linux 安装 Nginx 并配置为系统服务(超详细)
DataGrip之一个赏心悦目的SQL格式化模板,快用起来吧
DataGrip之一个赏心悦目的SQL格式化模板,快用起来吧
DataGrip之一个赏心悦目的SQL格式化模板,快用起来吧
|
监控 Java Unix
6个Java 工具,轻松分析定位 JVM 问题 !
本文介绍了如何使用 JDK 自带工具查看和分析 JVM 的运行情况。通过编写一段测试代码(启动 10 个死循环线程,分配大量内存),结合常用工具如 `jps`、`jinfo`、`jstat`、`jstack`、`jvisualvm` 和 `jcmd` 等,详细展示了 JVM 参数配置、内存使用、线程状态及 GC 情况的监控方法。同时指出了一些常见问题,例如参数设置错误导致的内存异常,并通过实例说明了如何排查和解决。最后附上了官方文档链接,方便进一步学习。
3464 4
|
3月前
|
存储 缓存 固态存储
固态硬盘能用多久?聊聊SSD寿命那些事儿
固态硬盘寿命常被误解,其实消费级TLC/QLC盘在日常使用下可轻松用5–10年甚至更久。寿命关键不在“写满就废”,而取决于P/E次数、写入放大、主控质量、温度与断电保护。合理留空、加强散热、避免异常断电,再搭配靠谱品牌,SSD远比想象中耐用。(239字)
|
5月前
|
搜索推荐 程序员
初级程序员必备的十大技能之问题排查与自学能力(一)
教程来源 http://qeext.cn/ 本文系统讲解程序员两大终极能力:问题排查与自学方法。涵盖六步调试法、二分/排除/对比定位技巧、错误解读、高效搜索、文档阅读及结构化学习路径,助你从“能写代码”进阶为“稳解难题、快学新技术”的高价值工程师。
|
运维 Kubernetes 负载均衡
教你读懂 高可用/SRE
高可用(HA)与网站可靠性工程(SRE)是保障现代分布式系统稳定运行的核心理念。HA关注系统持续可用的能力,常用“9”的数量衡量可靠性,如99.99%可用性意味着全年仅允许约52分钟宕机。实现手段包括冗余设计、故障转移、负载均衡、限流熔断与数据多活。SRE则通过工程化方法提升系统可靠性,核心在于SLI(服务指标)、SLO(目标值)、SLA(服务协议)的指标体系,结合错误预算、自动化运维、容量规划与事后分析,实现稳定与效率的平衡。二者相辅相成,HA是目标,SRE是路径,共同构建“可测、可控、可优化”的系统稳定性体系。
1239 0
|
11月前
|
安全 数据安全/隐私保护
隐形水印:让偷录者无处遁形的终极防线
视频会议时代,偷录偷拍成信息泄露重灾区。从国家安全到商业机密,风险无处不在。隐形水印技术为音视频嵌入唯一“数字指纹”,实现源头追溯,构建可防、可溯、可追责的安全闭环,筑牢会议信息安全防线。
421 2
|
11月前
|
移动开发 前端开发 JavaScript
前端开发就业课程:10个企业级项目+3000课时完整学习路线
3000+课时,覆盖HTML5、CSS3、JavaScript、Vue、React、小程序六大技术栈,含10+企业级项目实战,配套源码与课件。从零基础到就业,系统掌握前端核心技能,助力转行、提升或补足技术短板,学完具备前端开发就业能力。
|
数据采集 Web App开发 搜索推荐
突破目标网站的反爬虫机制:Selenium策略分析
突破目标网站的反爬虫机制:Selenium策略分析
|
设计模式 监控 Java
分布式系统架构4:容错设计模式
这是小卷对分布式系统架构学习的第4篇文章,重点介绍了三种常见的容错设计模式:断路器模式、舱壁隔离模式和重试模式。断路器模式防止服务故障蔓延,舱壁隔离模式通过资源隔离避免全局影响,重试模式提升短期故障下的调用成功率。文章还对比了这些模式的优缺点及适用场景,并解释了服务熔断与服务降级的区别。尽管技术文章阅读量不高,但小卷坚持每日更新以促进个人成长。
652 12