JVM在哪些场景下会发生OOM问题,并提供解决方案
发布时间
阅读量:
阅读量
第一次面试即遇到此类问题令我措不暇及,当时虽未善加应对却仍力图回答,仅知OOM问题大致涉及Java内存区域的四个关键部位:具体发生在堆溢出事件、方法区发生溢出、直接内存溢出事件以及栈溢出事件.其中,针对"栈"的问题需特别指出:"栈"主要包含"虚拟机调用栈与本地方法调用栈",而在大多数热 spots环境中两者通常不加以区分处理.
Jprofiler支持OOM内存溢出分析:关于Jprofiler的使用安装
堆内存溢出
原因 :很多实例被不断创建,并且GC Roots之间的对象存在可到达路径以防止垃圾回收系统移除这些实例。当实例总数超过最大堆容量时,则会导致OOM错误发生。
堆的最小值参数 -Xms
堆的最大值参数 -Xmx
上面两个值设置为一样的,则堆内存可自动扩展。
指定在内存溢出时启用堆快照捕获-XX:+HeapDumpOnOutOfMemoryError ,有助于后续的调试分析
当发生异常时的堆栈深度达到一定值时
解决
内存溢出问题:排查泄露对象到GC Roots的引用链以确定如何路径导致垃圾收集器无法自行回收资源,并明确相关信息以定位代码漏洞。
Memory Leak:适当增大-Xms参数值,并排查可能存在的对象
全部评论 (0)
还没有任何评论哟~
