OOM问题定位

参考:

http://blog.itpub.net/28912557/viewspace-1455299/

一:堆内存溢出

Java创建的对象一般都是分配在堆中。我们在上一篇博文讲过,JVM的堆又分为 新生代、老年代、永久代(Java8已移除)。那么堆中出现OOM异常一般在就是因为在这几个地方内存不足导致的了。一般报错:

    Exception in thread \"main\" java.lang.OutOfMemoryError: Java heap space
        at java.util.Arrays.copyOf(Arrays.java:2760)
        at java.util.Arrays.copyOf(Arrays.java:2734)
        at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
        at java.util.ArrayList.add(ArrayList.java:351)
        at test.java.VM.OOM.HeapOOM.main(HeapOOM.java:19)

二:方法区内存溢出

方法区主要存放类的信息、静态变量、运行时常量、Field、Method信息等,当不停地有类动态创建并加载时,方法区也能产生OOM。

报错信息:

Exception in thread \"main\" java.lang.OutOfMemoryError: PermGen space

三:栈溢出

栈的异常有两种:

JVM在执行方法时就会创建方法栈,方法的递归、调用等使得其他方法不停地入栈,其他方法执行完毕就会弹出栈帧。当一个方法栈的深度大于JVM所允许的深度时就会报StackOverFlow;一般,出现StackOverFlow时就要检查代码是否有无穷递归的情况出现了。

    stack length:1007Exception in thread \"main\" java.lang.StackOverflowError

        at test.java.VM.OOM.JavaVMStackOF.stackLeak(JavaVMStackOF.java:13)
        at test.java.VM.OOM.JavaVMStackOF.stackLeak(JavaVMStackOF.java:14)

栈空间扩展时没有足够的内存则报OutOfMemory。

时间: 2024-11-04 18:12:15

OOM问题定位的相关文章

OOM问题定位方法

1. 背景 线上内存OOM问题是最难定位的问题,最常见的原因: (1)本身资源不够 (2)申请的太多 (3)资源耗尽 某服务器上部署了Java服务,出现OutOfMemoryError,请问有可能是什么原因,问题应该如何定位? 解决思路: Java服务OOM,最常见的原因为: (1)有可能是内存分配确实过小,而正常业务需要使用更大的内存: (2)某一个对象被频繁申请,却没有释放,内存不断泄露,导致内存耗尽: (3)某一个资源被不断申请,系统资源耗尽,例如:不断创建线程,不断发起网络连接 2. 排

Android内存、性能是程序永恒的话题

内存.性能是程序永恒的话题,实际开发中关于卡顿.OOM也经常是打不完的两只老虎,关于卡顿.OOM的定位方法和工具比较多,这篇文章也不打算赘述了,本章主要是来整理一下JVM的内存模型以及Java对象的生与死. 生存空间(内存区域) Java程序运行在JVM之上,如果Java对象是一个有血有肉的生灵,那么它生存环境是怎样的呢?很多人把Java内存分为堆内存(Heap)和栈内存(Stack),实际上这种划分比较出粗糙和片面.比较细致的划分是这样的: 分为程程计数器.虚拟机栈.本地方法栈.方法区和堆.

线上问题排查

线上操作与线上问题排查实战 技术同学需要经常登录线上的服务器进行操作,58到家架构部/运维部/58速运技术部,联合进行了一次线上操作与线上问题排查实战演练,同学们反馈有收获,特将实战演练的问题和答案公布出来,希望对大家也有帮助. 一.了解机器连接数情况 问题:1.2.3.4的sshd的监听端口是22,如何统计1.2.3.4的sshd服务各种连接状态(TIME_WAIT/ CLOSE_WAIT/ ESTABLISHED)的连接数. 参考答案: netstat -n | grep 1.2.3.4:2

Java问题定位方法总结

背景   "线下没问题的". "代码不可能有问题 是系统原因"."能在线上远程debug么"    线上问题不同于开发期间的bug,与运行时环境.压力.并发情况.具体的业务相关.对于线上的问题利用线上环境可用的工具,收集必要信息 对定位问题十分重要.    对于导致问题的bug.资源瓶颈很难直观取得数据,需要根据资源使用数据.日志等信息推测问题根源.并且疑难问题的定位通常需要使用不同的方法追根溯源.    这篇wiki我对自己使用过的工具做了整理

Android OOM异常解决方案

一,什么是OOM异常: OOM(out of Memory)即内存溢出异常,也就是说内存占有量超过了VM所分配的最大,导致应用程序异常终止: 二,为什么会产生OOM异常呢? OOM异常是Android中经常遇到的一个问题,程序员稍微不注意可能就导致其产生.通常OOM都发生在需要用到大量内存的情况下,因为Android的每一个应用都是一个Davlik虚拟机,该虚拟机的默认堆内存只有16M,远远无法跟我们的PC机比较,因此和容易导致OOM(Out Of Memory)异常的产生.导致这样的异常主要有

如何分析android的OOM,与java静态代码分析工具

用MAT分析OOM 很多OOM看似发生在bitmap 分配得时候,但它一般不是rootcause.根本原因都在于本应该自动释放的资源,因为代码的错误,而导致某些对象一直被引用(Reference),例如 Android 内存优化,如何避免OOM 文章中提到的Activity 的mContext 引用. 当代码量很庞大的时候,单靠读代码查找错误是很困难的,所以必须借助于工具,这里介绍一款很好用的分析工具MAT. 1.下载MAT http://www.eclipse.org/mat/download

Hiveserver2 OOM问题解法

数据平台做一些计算需要通过hive jdbc方式连到hiveserver2执行job,但是hiveserver 正常运行一段时间后,总是会报如下OOM: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Hive history file=/tmp/work/hive_job_log_ce580f37-05ff-4ca6-b4c8-bb4337e0ed47_1912327686.txt Total MapReduce jobs = 1 Launching

Android OOM 系列

2016-04-07 OOM手记 最近组里改友盟上的BUG,NullReference——防空,非UI线程访问UI控件?ClassCastException,Dialog在Activity之后dismis/show...各种问题慢慢解决了,因为大多就是业务逻辑的处理有问题.最后就剩下一个OOM的大头,因为大多数异常不是对应的具体的业务代码,都是系统类抛出的,所以统一放在最后解决:设计良好的app通常常驻内存的也就不过5个Activity,也少有Activity会占用很大的内存,因为历史代码的原因

Android:内存控制及OOM处理

  1. OOM(内存溢出)和Memory Leak(内存泄露)有什么关系? OOM可能是因为Memory Leak,也可能是你的应用本身就比较耗内存(比如图片浏览型的).所以,出现OOM不一定是Memory Leak. 同样,Memory Leak也不一定就会导致OOM,如果泄露的速度很慢,可能还没用完可用内存应用就被重启了,那就不会OOM咯.当然了,有bug解决了最好. 2. 什么是shallow heap与retained heap? shallow heap:你自身占了多少内存,比如你有