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

相关文章
|
4月前
|
Java Linux 容器
JVM内存问题之什么是OOM-Killer,它通常会在什么情况下触发
JVM内存问题之什么是OOM-Killer,它通常会在什么情况下触发
116 2
|
4月前
|
Java UED
Java面试题:描述JVM中垃圾收集的Stop-The-World现象及其影响
Java面试题:描述JVM中垃圾收集的Stop-The-World现象及其影响
52 1
|
6月前
|
缓存 架构师 算法
Java内存溢出如何解决,Java oom排查方法,解决办法
在Java开发过程中,有效的内存管理是保证应用程序稳定性和性能的关键。不正确的内存使用可能导致内存泄露甚至是致命的OutOfMemoryError(OOM)。
|
6月前
|
缓存 架构师 算法
Java内存溢出如何解决,Java oom排查方法,10个定位解决办法
在Java开发过程中,有效的内存管理是保证应用程序稳定性和性能的关键。不正确的内存使用可能导致内存泄露甚至是致命的OutOfMemoryError(OOM)。
141 0
|
6月前
|
Java 应用服务中间件
jvm性能调优实战 - 45无限制的调用方法导致栈溢出OOM
jvm性能调优实战 - 45无限制的调用方法导致栈溢出OOM
83 0
|
存储 Arthas 缓存
千万不要这样写代码!9种常见的OOM场景演示
在《Java虚拟机规范》的规定里,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生 OutOfMemoryError 异常的可能。 本篇主要包括如下 OOM 的介绍和示例: java.lang.StackOverflowError java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: GC overhead limit exceeded java.lang.OutOfMemoryError-->Metaspace
千万不要这样写代码!9种常见的OOM场景演示
|
Arthas Dubbo Oracle
Java虚拟机OOM解析
针对以Java主导的企业级应用开发,Java虚拟机是整个项目架构的灵魂所在。只有弄清楚其内存分配及垃圾回收机制才能够在项目建设活动过程中游刃而余,无论是基于当前流行的微服务体系(以Spring家族的 Spring Cloud或以Ali家族的Dubbo)or 即将(已经)流行的服务网格体系。
124 1
|
存储 缓存 监控
37-大厂面试题:什么是内存溢出?在哪些区域会发生内存溢出?请解释下直接内存OOM
什么是内存溢出?在哪些区域会发生内存溢出?请解释下直接内存OOM
146 0
|
存储 缓存 算法
内存溢出、内存泄露的概述及常见情形
内存溢出、内存泄露的概述及常见情形
50813 3
内存溢出、内存泄露的概述及常见情形
|
Arthas Java 测试技术
发生OOM了,你知道是什么原因吗,又该怎么解决呢?
总结常见的OOM的原因以及解决方案。
683 0