转载自  JVM发生OOM的 8 种原因、及解决办法

1、Java 堆空间

发生频率:5颗星

造成原因
无法在 Java 堆中分配对象
吞吐量增加
应用程序无意中保存了对象引用,对象无法被 GC 回收
应用程序过度使用 finalizer。finalizer 对象不能被 GC 立刻回收。finalizer 由结束队列服务的守护线程调用,有时 finalizer 线程的处理能力无法跟上结束队列的增长
解决方案
使用 -Xmx 增加堆大小
修复应用程序中的内存泄漏

2、GC 开销超过限制

发生频率:5颗星

造成原因
Java 进程98%的时间在进行垃圾回收,恢复了不到2%的堆空间,最后连续5个(编译时常量)垃圾回收一直如此。
解决方案
使用 -Xmx 增加堆大小
使用 -XX:-UseGCOverheadLimit 取消 GC 开销限制
修复应用程序中的内存泄漏

3、请求的数组大小超过虚拟机限制

发生频率:2颗星

造成原因
应用程序试图分配一个超过堆大小的数组

解决方案
使用 -Xmx 增加堆大小
修复应用程序中分配巨大数组的 bug

4、Perm gen 空间

发生频率:3颗星

造成原因
Perm gen 空间包含:
类的名字、字段、方法
与类相关的对象数组和类型数组
JIT 编译器优化

当 Perm gen 空间用尽时,将抛出异常。

解决方案
使用 -XX: MaxPermSize 增加 Permgen 大小
不重启应用部署应用程序可能会导致此问题。重启 JVM 解决

5、Metaspace

发生频率:3颗星

造成原因
从 Java 8 开始 Perm gen 改成了 Metaspace,在本机内存中分配 class 元数据(称为 metaspace)。如果 metaspace 耗尽,则抛出异常

解决方案
通过命令行设置 -XX: MaxMetaSpaceSize 增加 metaspace 大小
取消 -XX: maxmetsspacedize
减小 Java 堆大小,为 MetaSpace 提供更多的可用空间
为服务器分配更多的内存
可能是应用程序 bug,修复 bug

6、无法新建本机线程

发生频率:5颗星

造成原因
内存不足,无法创建新线程。由于线程在本机内存中创建,报告这个错误表明本机内存空间不足

解决方案
为机器分配更多的内存
减少 Java 堆空间
修复应用程序中的线程泄漏。
增加操作系统级别的限制
ulimit -a
用户进程数增大 (-u) 1800
使用 -Xss 减小线程堆栈大小

7、杀死进程或子进程

发生频率:1颗星

造成原因
内核任务:内存不足结束器,在可用内存极低的情况下会杀死进程

解决方案
将进程迁移到不同的机器上
给机器增加更多内存
与其他 OOM 错误不同,这是由操作系统而非 JVM 触发的。

8、发生 stack_trace_with_native_method

发生频率:1颗星

造成原因
本机方法(native method)分配失败
打印的堆栈跟踪信息,最顶层的帧是本机方法

解决方案
使用操作系统本地工具进行诊断

JVM发生OOM的 8 种原因、及解决办法相关推荐

  1. JVM出现OOM的八种原因及解决办法

    本文源自转载:JVM出现OOM的八种原因及解决办法 目录 一.堆溢出 1.1 原因 1.2解决方法 二.永久代/元空间溢出 2.1 原因 2.2 解决方法 三.GC overhead limit ex ...

  2. linux下hg无法运行_Linux 无法启动常见的几种原因及解决办法

    导致 Linux 无法启动的原因有很多,下面良许小编就将常见的几种原因及解决办法进行详述,希望对大家有所帮助. 文件系统配置不当,如 /etc/inittab文件./etc/fstab 文件等配置错误 ...

  3. java 内存 溢出_java内存溢出的几种原因和解决办法是什么?

    java内存溢出的几种原因和解决办法是什么? java内存溢出的几种原因和解决办法是: 第一类内存溢出,也是大家认为最多,第一反应认为是的内存溢出,就是堆栈溢出: 那什么样的情况就是堆栈溢出呢?当你看 ...

  4. 内存溢出的几种原因和解决办法

    对于JVM的内存写过的文章已经有点多了,而且有点烂了,不过说那么多大多数在解决OOM的情况,于此,本文就只阐述这个内容,携带一些分析和理解和部分扩展内容,也就是JVM宕机中的一些问题,OK,下面说下O ...

  5. 导致大量kworker的原因_氨氮超标的几种原因及解决办法

    一.有机物导致的氨氮超标 CN 比小于 3 的高氨氮污水,因脱氮工艺要求 CN 比在 4~6,所以需要投加碳源来提高反硝化的完全性.当时投加的碳源是甲醇,因为某些原因甲醇储罐出口阀门脱落,大量甲醇进入 ...

  6. 关于-/bin/sh:xx(命令) not found 的几种原因和解决办法

    编写背后:昨天移植无线网卡到mini2440基本完成到最后一步:用命令:iwlist scanning  搜索网络时串口终端却出现了 -/bin/sh: iwlist  not  found ,后来请 ...

  7. fiddler抓包——手机添加代理后APP连不上网的常见4种原因及解决办法

    更新 遇到的问题是: Android6.0及以下系统可以抓包,而Android7.0及以上系统不能再抓包. 原因: Android7.0+的版本新增了证书验证,即app内不再像原来一样默认信任用户的证 ...

  8. 内存溢出的几种原因和解决办法是什么?

    内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存. 引起内存溢出的原因有很多种,常见的有以下几种: 内存中加载的数据量过于庞大,如一次从 ...

  9. php100并发cpu告警,多线程并发导致CPU100%的一种原因和解决办法

    在用自定义线程池的时候,遇到cpu100%,经过验证后,发现问题来源于我定义的子线程. 子线程的主要功能是从任务队列(LinkedBlockingQueue)里面持续拿出任务,并且执行. 以下为令CP ...

最新文章

  1. 【读书笔记】知易行难,多实践
  2. CV算法复现(分类算法2/6):AlexNet(2012年 Hinton组)
  3. face.evoLVe.PyTorch
  4. The Road to Ryu: Hi Ryu
  5. 架构之:微服务架构漫谈
  6. Java DICOM 网络传输_DICOM医学图像处理:fo-dicom网络传输之 C-Echo and C-Store
  7. XCTF-Web-高手区-easytornado
  8. 0-11 NFS与TFTP服务器配置
  9. 再谈注意力机制 | 运用强化学习实现目标特征提取
  10. 网络驱动器映射成功但无法更新文件_我的电脑访问NAS像打开本地硬盘那样打开网络NAS...
  11. 数据库工作笔记14---win10系统安装sqlserver2005提示服务无法启动
  12. 虚幻四中怎么保持导入模型坐标_[CG分享]|虚幻引擎5 技术解析
  13. 专访弘玑Cyclone贾岿、吴楠:超自动化+流程挖掘,助力企业深度掌控完整数字业务流程走势
  14. unity 物体移动方式的一些笔记
  15. wpsppt页面卷曲在哪里_用PPT制作页面卷角效果,你会吗?
  16. 2020牛客寒假算法基础集训营1 G eli和字符串
  17. 外卖优惠券公众号怎么做回复小程序链接
  18. APP按下home键恢复到登录(主界面)
  19. java学生成绩管理系统类图,学生成绩管理系统的用例类图
  20. Termios 函数说明

热门文章

  1. java实用教程——组件及事件处理——布局管理(五种)
  2. c语言——什么时候使用getchar()读取换行符
  3. 吴恩达DeepLearningCourse2-改善深层神经网络:超参数调试、正则化以及优化
  4. idea中右侧的Maven框消失了
  5. [蓝桥杯][历届试题]回文数字-暴力枚举
  6. ember.js mysql_用AWS部署ember.jspadrino应用系列之一
  7. 数据结构与算法--简单栈实现及其应用
  8. word List 49
  9. tf.variable_scope() and tf.name_scope()
  10. HDU - 7054 Yiwen with Formula 分治拆位FFT + dp + 费马小定理降幂