首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OOM内存溢出原因分析

场景 线上解析上传PDF定时任务一直在执行状态,没有结束掉,查看服务日志没有抛出异常,在服务器上发现生成了hpvof文件(VM配置参数-XX:+HeapDumpOnOutOfMemoryError)。...下面就来看一下这个文件。...接着在插件里面配置一下这样方便以后运行程序时候实时运营JProfiler,如下图所示: 分析文件 打开JProfiler软件>>点击session>>选open Snapshot,加载hpvof...文件,打开后是这样 这里可以查看Thread Dump,这里可以明显看到Thread-1060线程有问题,点开我们可以具体看到是哪一行代码出现了问题。...这里是通过pdfboxjar读取pdf文件,并进行加密等操作,猜测可能是pdf文件过大导致,通过实际测试发现170M文件在解析过程中内存持续增长,该jar包内存回收可能存在一定问题。

1K20

jmap及内存溢出分析

前面通过jstat可以对jvm堆内存进行统计分析,而 jmap 可以获取到更加详细内容,如:内存使用情况汇总、对内存溢出定位与分析。...到文件中 有些时候我们需要将jvm当前内存情况dump到文件中,然后对它进行分析,jmap也是支持dump到文件。...可以看到已经在/tmp下生成了dump.dat文件 通过jhat对dump文件进行分析 上面我们将 jvm 内存信息 dump 到文件中,这个文件是一个二进制文件,不方便查看,这时我们可以借助于...查看可能存在内存泄露分析: ? 内存溢出定位与分析 内存溢出在实际生产环境中经常会遇到,比如,不断将数据写入到一个集合中,出现了死循环,读取超大文 件等等,都可能会造成内存溢出。...可以看到,当发生内存溢出时,会dump文件到java_pid5348.hprof。 导入到MAT工具中进行分析 ? 可以看到,有91.03%内存由Object[]数组占有,所以比较可疑。

1.8K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    jvm内存溢出分析内存溢出是什么?内存溢出内存泄漏有什么区别?用到jvm参数分析解决方法分析

    当程序需要申请内存时候,由于没有足够内存,此时就会抛出OutOfMemoryError,这就是内存溢出 内存溢出内存泄漏有什么区别?...)分析,队列l作为GC Root,每一个对象都是l一个可达节点,所以疯狂创建对象不会被收集,这就是内存泄漏,这样总有一天堆就溢出了。...,并提示发生在Java heap space 分析解决方法 思路 用visualVM工具分析堆快照 如果发生内存泄漏: step1:找出泄漏对象 step2:找到泄漏对象GC Root step3...因为分析工具会占用很大内存,不建议在服务端进行分析。 实战 下面对刚才程序产生内存快照进行分析。 打开visualVM,装入刚刚生成快照,打开类标签页 ?...解决方案: 在应用服务器中建立一个共享lib库,把项目中常用重复jar包存放在这里,项目从这里加载jar包,这样就会大大减少类加载数量,方法区也“瘦身”了 如果实在不能瘦身类的话,那可以扩大方法区容量

    1.6K61

    从main方法分析内存溢出

    内存溢出OutOfMemoryError不常遇到,起码没有姨妈空指针异常(NullPointerException)来那么频繁。 现在就用最简单main方法复现堆内存溢出并做分析。...(往细了说年轻代还有伊甸园(eden)和两个幸存区(from、to)) 当java对象在年轻代存活一段时间经历过N次回收没有被回收掉后(N还可以自己设置),就会进入老年代,在老年代中又经历回收后积累没有被回收对象超负荷后就会抛出内存溢出异常...++; peoples.add(abc); System.out.println(abc.toString() + i); } } 结果在生成540217个对象时候抛出了内存溢出异常...分析内存快照 想要更详细分析还得生成内存快照,同样添加启动参数 参数 说明 -XX:+HeapDumpOnOutOfMemoryError 开启内存快照 -XX:HeapDumpPath=./ 存储路径...当然仅限于代码需要优化情况,如果没有需要优化还出现这种异常,就需要增大堆内存空间-Xms-Xmx两个参数。 如果还不行就需要结合上面两个工具分析,做出更细化调整。

    81520

    Java常见内存溢出异常分析

    ,我们需要根据内存溢出时候产生dump文件来具体分析(需要增加-XX:+HeapDumpOnOutOfMemoryErrorjvm启动参数)。...出现此种问题时候有可能是内存泄露,也有可能是内存溢出了。 如果内存泄露,我们要找出泄露对象是怎么被GC ROOT引用起来,然后通过引用链来具体分析泄露原因。...如果出现了内存溢出问题,这往往是程序本生需要内存大于了我们给虚拟机配置内存,这种情况下,我们可以采用调大-Xmx来解决这种问题。...使用一些应用服务器热部署时候,我们就会遇到热部署几次以后发现内存溢出了,这种情况就是因为每次热部署后,原来class没有被卸载掉。...一些第三方框架,比如spring,hibernate都通过字节码生成技术(比如CGLib)来实现一些增强功能,这种情况可能需要更大方法区来存储动态生成Class文件

    1.3K70

    深入理解Java中内存溢出内存溢出内存溢出几种情况(OOM 异常)导致内存溢出原因内存溢出解决方法

    内存溢出 程序运行过程中无法申请到足够内存而导致一种错误。...出现这种异常, 一般手段是先通过内存映像分析工具(如 Eclipse Memory Analyzer)对 dump 出来堆转存快照进行分析, 重点是确认内存对象是否是必要, 先分清是因为内存泄漏...如果是内存泄漏, 可进一步通过工具查看泄漏对象到 GC Roots 引用链。于是就能找到泄漏对象是通过怎样路径与 GC Roots 相关联并导致垃圾收集器无法自动回收。...内存溢出解决方法 第一步, 修改 JVM 启动参数, 直接增加内存。 (-Xms, -Xmx 参数一定不要忘记加。...第三步, 对代码进行走查和分析, 找出可能发生内存溢出位置。

    2.7K10

    JVM实战:内存溢出定位与分析

    文章目录 模拟内存溢出 运行测试 导入到MAT工具中进行分析 内存溢出在实际生产环境中经常会遇到,比如,不断将数据写入到一个集合中,出现了死循环,读取超大文件等等,都可能会造成内存溢出。...如果出现了内存溢出,首先我们需要定位到发生内存溢出环节,并且进行分析,是正常还是非正常情况,如果是正常需求,就应该考虑加大内存设置,如果是非正常需求,那么就要对代码进行修改,修复这个bug。...首先,我们得先学会如何定位问题,然后再进行分析。如何定位问题呢,我们需要借助于jmap与MAT工具进行定位分析。 接下来,我们模拟内存溢出场景。...,会dump文件到java_pid30612.hprof。...导入到MAT工具中进行分析 可以看到,有88.22%内存由Object[]数组占有,所以比较可疑。 分析:这个可疑是正确,因为已经有88%内存都被它占有,这是非常有可能出现内存溢出

    41420

    phpExcel导出文件内存溢出问题

    在使用PHPExcel导出文件时,经常会因为文件过大导致PHP内存溢出报错,为了解决这个问题,可以使用PHPExcel提供参数进行优化。...这里说Excel文件过大并不一定是文件大小,更关键在于文件内存数据和格式,如果数据很多,格式又比较丰富,那很容易会将PHP内存耗尽。...资料2中指出,Excel中一个单元格在不启用缓存情况下大概占用内存是1K,一个8000行、31列表格(248000个单元格)需要242MB内存。...如果启用缓存,则会降到80MB,效果还是非常明显。 使用中需要注意,PHPExcel内存优化参数并不在PHPExcel对象中,需要在PHPExcel实例化之前设置。...,然后保存在内存中 PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip; 缓存在临时磁盘文件中,速度可能会慢一些 PHPExcel_CachedObjectStorageFactory

    2.5K30

    Jvm中各种内存溢出情况分析

    要探讨JVM出现oom情况,首先要了解下jvm内存模型。 ? 上图中每个区域都可能出现oom,除此之外还有直接内存(direct memory)溢出。...堆溢出 java堆用于存储对象实例,只要不断地产生对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量达到最大堆容量限制后就会产生内存溢出异常。...可达性分析算法 判断对象是否可以回收采用是可达性分析算法,只要被gc roots引用对象就不会被回收。那么gc root有那几种?...通过mat内存分析工具打开dump出来文件,如果是内存泄漏,查看泄漏对象到gc roots引用链,找到泄漏对象是通过怎样路径与gc roots相关联并导致垃圾收集器无法自动回收它们,就能比较准确定位出泄漏代码位置...关于虚拟机栈和本地方法栈溢出,在Java虚拟机规范中描述了两种异常: 线程执行深度大于虚拟机所允许深度时,将抛出StackOverflowError 如果虚拟机在扩展栈时无法申请到足够内存空间,将抛出

    96030

    Java内存溢出OOM使用Mat分析

    20m,程序不停创建对象,而对象又是在堆上分配内存,一直不停向List中添加对象,没有垃圾回收,导致堆内存溢出(OutOfMemoryError)....Mat工具分析堆 1.下载Mat分析软件:https://www.eclipse.org/mat/downloads.php 2.VM参数加上: -XX:+HeapDumpOnOutOfMemoryError...开启堆内存溢出导出堆内存文件,默认在项目的根目录下.如果需要指定其它路径用-XX:HeapDumpPath=/tmp,会生成一个名字类似的java_pid28790.hprof文件. 3.使用Mat打开...hprof文件 image-20201014114417693 java.lang.Object[14053]含义:List本质上就是Object[]数组,14053就是里面存放对象个数...Retained Heap=112424+224848=337296和Mat分析结果一致. 相关文章 JVM,JRE,JDK之间区别和联系

    57710

    生产环境JVM内存溢出案例分析

    本文将通过一个线上环境JVM内存溢出案例向大家介绍一下处理思路与分析方法。 案例:架构组接到某项目组反馈,Zabbix监控上显示JMX不可用,请求协助处理。...分析思路: JMX不可用,往往是由于垃圾回收时间停顿时间过长、内存溢出等问题引起。 线上故障分析原则是首先要采取措施快速恢复故障对业务影响,然后才是采集信息、分析定位问题,并最终给出解决办法。...分析解决问题 首先可以通过查看日志,确定是哪种内存溢出,堆内存溢出可发生地方:Java heap space(堆空间)、perm space(持久代)。 ?...收集内存溢出Dump文件 收集Dump文件有两种方式: 设置JVM启动参数 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/jvmdump...在每次发生内存溢出时,JVM会自动将堆转储,dump文件存放在-XX:HeapDumpPath指定路径下。

    2.6K20

    性能优化-实战:内存溢出定位与分析

    5、实战:内存溢出定位与分析 内存溢出在实际生产环境中经常会遇到,比如,不断将数据写入到一个集合中,出现了死循环,读取超大文件等等,都可能会造成内存溢出。...如果出现了内存溢出,首先我们需要定位到发生内存溢出环节,并且进行分析,是正常还是非正常情况,如果是正常需求,就应该考虑加大内存设置,如果是非正常需求,那么就要对代码进行修改,修复这个bug。...接下来,我们模拟内存溢出场景 5.1、模拟内存溢出 编写代码,向List集合中添加100万个字符串,每个字符串由1000个UUID组成。如果程 序能够正常执行,最后打印ok。 ?...5.3、导入到MAT工具中进行分析 ? 可以看到,有91.03%内存由Object[]数组占有,所以比较可疑。...分析:这个可疑是正确,因为已经有超过90%内存都被它占有,这是非常有可能出现内存溢出。 查看详情: ? 可以看到集合中存储了大量uuid字符串。

    63710

    记一次内存溢出分析经历

    问题定位与分析 步骤一.初步分析 客户端无法连接服务端,查看服务器端口开启状况,服务端口并没有开启。于是启动服务端,启动几秒后,服务端崩溃,重复启动,服务端依旧在启动几秒后崩溃。...步骤二.查看服务端日志分析 分析得知是因为java.lang.OutOfMemoryError: Java heap space(堆内存溢出)导致服务崩溃。...结果是,能坚持多一点时间,依旧会内存溢出服务崩溃。得出结论,一味扩大内存是没有用。...**为了证明结论是正确,做了这样实验:** > 内存设置为256MB,在公司服务器上部署了服务端,使用Java VisualVM远程监控服务器内存。...> > 结果和想象一样,没有出现内存溢出情况,如下图: ? > 上图是Java VisualVM远程监控,在压力测试情况下,没有出现内存溢出情况,256MB内存肯定够用

    1.1K10

    Sieve—Android 内存分析系统 | 解决你内存溢出问题

    Sieve—Android 内存分析系统(http://performance.jd.com/,暂时只面向京东集团内部使用) 这是一个面向开发者工具,上传一份 Hprof 文件(堆转储),系统将为你生成一份分析报告...同时,需要知道是,GC Roots 是动态变化,一个引用可能刚刚是 GC Root ,这会又不是了。 解析工作其实就是读取文件中以上提到信息,并将其映射至内存过程。...各个对象 Retained Size 大小是我们分析内存使用情况重要指标,当某些对象Retained Size 过大时,可能代表着不合理内存使用或者泄露。...dump 下来 hprof 文件如果映射至内存,动辄两三百兆(经观察发现它与 hprof 中对象多少正相关),这显然会直接让分析进程就 OOM 了。...另外,研发过程中我们碰到并解决了巨多细节上坑和问题,限于篇幅,感兴趣同学可以私下交流探讨。 点击阅读原文,来试试Sieve—Android 内存分析系统吧。

    1.2K20

    内存溢出内存泄漏区别

    integer,但给它存了long才能存下数,那就是内存溢出。...内存溢出就是你要求分配内存超出了系统能给你,系统不能满足需求,于是产生溢出。...内存溢出原因及解决方法: (1) 内存溢出原因: 内存中加载数据量过于庞大,如一次从数据库取出过多数据; 集合类中有对对象引用,使用完后未清空,使得JVM不能回收; 代码中存在死循环或循环产生过多重复对象实体...; 使用第三方软件中BUG; 启动参数内存值设定过小 (2)内存溢出解决方案: 第一步,修改JVM启动参数,直接增加内存。...第三步,对代码进行走查和分析,找出可能发生内存溢出位置。重点排查以下几点: 检查对数据库查询中,是否有一次获得全部数据查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出

    4.1K40
    领券