本文来自:

https://bloggceasy.files.wordpress.com/2015/05/outofmemoryerror2.pdf

1. Java 堆空间

发生频率:5颗星

造成原因

  1. 无法在 Java 堆中分配对象

  2. 吞吐量增加

  3. 应用程序无意中保存了对象引用,对象无法被 GC 回收

  4. 应用程序过度使用 finalizer。finalizer 对象不能被 GC 立刻回收。finalizer 由结束队列服务的守护线程调用,有时 finalizer 线程的处理能力无法跟上结束队列的增长

解决方案

单位对应:GB -> G, g;MB -> M, m;KB -> K, k

  1. 使用 -Xmx 增加堆大小

  2. 修复应用程序中的内存泄漏

2. GC 开销超过限制

发生频率:5颗星

造成原因

  1. Java 进程98%的时间在进行垃圾回收,恢复了不到2%的堆空间,最后连续5个(编译时常量)垃圾回收一直如此。

解决方案

  1. 使用 -Xmx 增加堆大小

  2. 使用 -XX:-UseGCOverheadLimit 取消 GC 开销限制

  3. 修复应用程序中的内存泄漏

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

发生频率:2颗星

造成原因

  1. 应用程序试图分配一个超过堆大小的数组

解决方案

  1. 使用 -Xmx 增加堆大小

  2. 修复应用程序中分配巨大数组的 bug

4. Perm gen 空间

发生频率:3颗星

造成原因

Perm gen 空间包含:

  • 类的名字、字段、方法

  • 与类相关的对象数组和类型数组

  • JIT 编译器优化

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

解决方案

  1. 使用 -XX: MaxPermSize 增加 Permgen 大小

  2. 不重启应用部署应用程序可能会导致此问题。重启 JVM 解决

5. Metaspace

发生频率:3颗星

造成原因

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

解决方案

  1. 通过命令行设置 -XX: MaxMetaSpaceSize 增加 metaspace 大小

  2. 取消 -XX: maxmetsspacedize

  3. 减小 Java 堆大小,为 MetaSpace 提供更多的可用空间

  4. 为服务器分配更多的内存

  5. 可能是应用程序 bug,修复 bug

6. 无法新建本机线程

发生频率:5颗星

造成原因

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

解决方案

  1. 为机器分配更多的内存

  2. 减少 Java 堆空间

  3. 修复应用程序中的线程泄漏。

  4. 增加操作系统级别的限制

    • ulimit -a

    • 用户进程数增大 (-u) 1800

  5. 使用 -Xss 减小线程堆栈大小

7. 杀死进程或子进程

发生频率:1颗星

造成原因

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

解决方案

  1. 将进程迁移到不同的机器上

  2. 给机器增加更多内存

与其他 OOM 错误不同,这是由操作系统而非 JVM 触发的。

8. 发生 stack_trace_with_native_method

发生频率:1颗星

造成原因

  1. 本机方法(native method)分配失败

  2. 打印的堆栈跟踪信息,最顶层的帧是本机方法

解决方案

  1. 使用操作系统本地工具进行诊断

一文了解OOM及解决方案相关推荐

  1. 一文了解OOM及解决方案,成功入职字节跳动

    一.内存与线程 1.内存结构 内存是计算机的重要部件之一,它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平.JVM的内存结构规定Java程序 ...

  2. 一文了解OOM及解决方案,你还看不明白?

    InnoDB总体结构 首先我们来看官网的一张图(图片来源于MySQL官网): 从上图中可以看出其主要分为两部分结构,一部分为内存中的结构(上图左边),一部分为磁盘中的结构(上图右边) 内存结构 Inn ...

  3. 借花献佛!一文了解OOM及解决方案,终局之战

    前言 阿里巴巴,作为国内互联网公司的Top,算是业界的标杆,有阿里背景的程序员,也更具有权威性.作为程序员,都清楚阿里对于员工要求有多高,技术人员掌握的技术水平更是望尘莫及.所以,大厂程序员的很多经验 ...

  4. [原创]java读写word文档,完美解决方案

    [原创]java读写word文档,完美解决方案 参考文章: (1)[原创]java读写word文档,完美解决方案 (2)https://www.cnblogs.com/ziwuxian/p/89812 ...

  5. knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案

    knife4j knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量, ...

  6. Android系统(134)--- Android关于OOM的解决方案 ##OOM

    Android关于OOM的解决方案 ##OOM 内存溢出(Out Of Memory) 也就是说内存占有量超过了VM所分配的最大 ##出现OOM的原因 加载对象过大 相应资源过多,来不及释放 ##如何 ...

  7. doc转swf,主流文档在线查看解决方案--类似百度文档功能

    引言:  最近项目中对上传的文件需要在线查看功能(就是不用下载到本地,可以直接在网页里打开的查看),通过几周的研究终于搞定,在此总结下供有同样需求的同仁查询和使用. 原理: 通常的在线查看功能都是使用 ...

  8. java读写word文档,完美解决方案

    java读写word文档,完美解决方案 java2word 是一个在java程序中调用 MS Office Word 文档的组件(类库).该组件提供了一组简单的接口,以便java程序调用他的服务操作W ...

  9. IP-Guard文档防泄密解决方案

    文档防泄密解决方案 概述 在信息化不断推进的今天,计算机.互联网等设备无疑提高了企业的办公效率.但企业在享受着高科技带来的便利之时也面临着随之而来的困扰.下面是一组真是的数据: 80%的安全威胁来自企 ...

最新文章

  1. 《Swift 权威指南》——第6章,第6.7节常量和变量参数
  2. RedHat/CentOS系统信息查看命令大全
  3. Linux安装PHP报错Sorry, I cannot run apxs. Possible reasons follow:
  4. java开发13寸_Java 从入门到进阶之路(二十九)
  5. distinct sql用法_十分钟搞懂SQL数据分析
  6. 网上一片红色的中国心,我也来跟随潮流,表达对祖国的热爱!
  7. 多线程读取视频及深度学习推理
  8. ADS 2022 软件下载与安装教程
  9. SSRF---gopher和dict打redis
  10. 2020-11-04 [蓝桥杯2018决赛]阅兵方阵
  11. Activity的概述
  12. 如何自动识别视频语音内容并生成字幕
  13. 微信小程序云函数请求接口
  14. mac电脑最好用的图片浏览器,没有之一
  15. MATLAB入门学习笔记12
  16. ROS学习总结十二:给自己的机器人添加传感器
  17. testlink mysql配置_testlink安装及配置
  18. Linux系统管理上机作业1
  19. 华为无线wifi设备连接到服务器,华为wifi路由器安装上网的方法
  20. 什么叫做展望_什么叫做展望未来。。

热门文章

  1. 实现基于渠道和buildType(debug,release)的打包
  2. javascript 声明变量var、let、const详解及示例
  3. JS两个函数之间的传参
  4. [转载]优化ASP.NET应用程序性能研究与探讨
  5. dup,dup2函数
  6. 利用耦合隐马尔可夫模型改进交易策略
  7. etcd使用之ttl不准确问题
  8. 论文笔记:PRIN: Pointwise Rotation-Invariant Networks
  9. 笔记2——C++ static关键字与一维动态数组的使用
  10. redis lua