zoukankan      html  css  js  c++  java
  • 性能分析 | JVM发生内存溢出的8种原因及解决办法

    推荐阅读:史上最详细JVM与性能优化知识点综合整理

    JVM发生内存溢出的8种原因、及解决办法

    1.Java 堆空间

    2.GC 开销超过限制

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

    4.Perm gen 空间

    5.Metaspace

    6.无法新建本机线程

    7.杀死进程或子进程

    8.发生 stack_trace_with_native_method

    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)分配失败
    • 打印的堆栈跟踪信息,最顶层的帧是本机方法
  • 相关阅读:
    聊聊WS-Federation
    用双十一的故事串起碎片的网络协议(上)
    责任链模式的使用-Netty ChannelPipeline和Mina IoFilterChain分析
    最小化局部边际的合并聚类算法(中篇)
    最小化局部边际的合并聚类算法(上篇)
    UVaLive 7371 Triangle (水题,判矩形)
    UVaLive 7372 Excellence (水题,贪心)
    POJ 3312 Mahershalalhashbaz, Nebuchadnezzar, and Billy Bob Benjamin Go to the Regionals (水题,贪心)
    UVa 1252 Twenty Questions (状压DP+记忆化搜索)
    UVa 10817 Headmaster's Headache (状压DP+记忆化搜索)
  • 原文地址:https://www.cnblogs.com/wyf0518/p/11451637.html
Copyright © 2011-2022 走看看