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

相关文章
|
3月前
|
人工智能 Java
JVM内存问题之当老年代缓慢增加且Full GC无法清除时,应如何使用MAT进行分析
JVM内存问题之当老年代缓慢增加且Full GC无法清除时,应如何使用MAT进行分析
116 0
|
4月前
|
Java
JVM打印GC信息
JVM打印GC信息
|
5月前
|
算法 Oracle Java
【JVM】了解JVM中动态判断对象年龄的原理
【JVM】了解JVM中动态判断对象年龄的原理
117 0
|
5月前
|
缓存 架构师 算法
Java内存溢出如何解决,Java oom排查方法,解决办法
在Java开发过程中,有效的内存管理是保证应用程序稳定性和性能的关键。不正确的内存使用可能导致内存泄露甚至是致命的OutOfMemoryError(OOM)。
|
5月前
|
缓存 架构师 算法
Java内存溢出如何解决,Java oom排查方法,10个定位解决办法
在Java开发过程中,有效的内存管理是保证应用程序稳定性和性能的关键。不正确的内存使用可能导致内存泄露甚至是致命的OutOfMemoryError(OOM)。
134 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场景演示
|
存储 缓存 监控
37-大厂面试题:什么是内存溢出?在哪些区域会发生内存溢出?请解释下直接内存OOM
什么是内存溢出?在哪些区域会发生内存溢出?请解释下直接内存OOM
126 0
|
算法 Java
一文搞懂Y-GC和Full GC的触发条件
1 Young GC触发时机 一般在新生代Eden区满后触发,采用复制算法回收新生代垃圾。
997 0
|
运维 监控 Kubernetes
JVM 输出 GC 日志导致 JVM 卡住
JVM 输出 GC 日志导致 JVM 卡住
JVM 输出 GC 日志导致 JVM 卡住
|
关系型数据库 Java 应用服务中间件