组里的美女同事在搭建性能测试环境时遭遇了OutOfMemoryError,做Java,做性能遇到OOM本是常事,不过这次的原因还是第一次碰到,分享一下我们的思路:
- 确认OOM的具体类型。 一般来讲,OOM常见的有unable to create new native thread、Out of swap space、Java heap space、GC overhead limit execeeded、PermGen space,不同类型的分析处理思路不同。 本次OOM是其中最为常见的一种:java.lang.OutOfMemoryError: Java heap space
- 根据“Java heap space”类型,我的第一反应是确认JVM参数的正确性,于是让美眉check了一下Xmx参数,没问题,1536m
- 然后美眉准备用MAT分析heap dump文件(启动参数事先已设置了HeapDumpOnOutOfMemoryError),我这时注意到该dump file大小只有几十兆,于是建议放弃分析dump,意义不大
- 尝试jmap -histo多次采样来查看占用空间最多的对象类型,看到原生类型的占用较多,又是死胡同,ft
- 只好转向进一步分析应用log,在经过若干次尝试后,发现每次OOM时的stack trace很固定,都是形如:
java.lang.OutOfMemoryError: Java heap space
Caused by:
java.lang.OutOfMemoryError: Java heap space
at com.taobao.tair.packet.BasePacket.readString(BasePacket.java:73)
at com.taobao.tair.packet.ResponseGetGroupPacket.decode(ResponseGetGroupPacket.java:55)
at com.taobao.tair.comm.TairClient.invoke(TairClient.java:140)
at com.taobao.tair.impl.ConfigServer.retrieveConfigure(ConfigServer.java:116)
at com.taobao.tair.impl.DefaultTairManager.init(DefaultTairManager.java:78)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1237)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1203)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1167)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:427)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)
…
于是大胆怀疑与tair相关,首先确认了tair server的健康状态后,结合最近搭建环境的变动,进一步怀疑到是配置文件中关于tair的配置相关,最终验证了这一猜想。
总结一下,OOM要根据具体问题具体分析,不要一味怀疑是应用代码或Xmx的问题。就像本次OOM中,曾求助相关应用开发人员,他一直在尝试调整Xmx参数大小,思路不对,甚至准备重新build部署应用…
相关推荐
一、OOM 问题排查过程概述 在 Java 应用程序中,OutOfMemoryError 是一种常见的异常,它可能是由于堆空间不足、永久代空间不足或是无法分配对象所引发的。在本文中,我们将通过一个实战记录,介绍如何排查 OOM 问题...
在Java虚拟机(JVM)的运行环境中,内存管理是至关重要的一个环节,尤其是在大型应用或者高并发场景下。当程序出现性能问题或者"OutOfMemoryError"(OOM)时,理解堆内存的使用情况就显得尤为关键。"JVM堆内存分析...
互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术...
通常我们会添加对内存的监控报警,例如:当memory或swap使用超过90%时,触发报警通知,需要及时介入排查。 如果已经出现OOM,则可以通过dmesg命令查看,CentOS7版本以上支持 -T选项,能将时间戳转成时
本篇将通过一个简单的OOM例子来探讨这个问题的发生原因、如何复现以及如何进行问题排查。 一、OOM现象与原因 当Java应用出现OOM时,JVM会抛出`java.lang.OutOfMemoryError`异常。这通常由以下几种情况引起: 1. *...
MemoryAnalyzer(MAT)是IBM开发的一款强大的JVM堆内存分析工具,它能够帮助开发者深入理解内存消耗,识别内存泄漏和不必要的对象留存,从而有效地解决OOM问题。 MAT主要基于.hprof文件进行分析,这种文件格式是...
在 Java 中,多线程编程时,常见的问题是一个线程抛出 Out Of Memory(OOM)异常是否会影响其他线程的运行。本文将通过实践和分析来解答这个问题,同时探讨主线程和子线程之间的关系。 多线程和 OOM 异常 在 Java ...
用例图1.oom
这个"Android例子源码仿oom的三例瀑布流源码"提供了三个示例,帮助开发者理解如何在实际应用中有效地处理内存问题,以及如何构建一个瀑布流布局。以下是对这些知识点的详细说明: 1. **内存管理**: - **对象生命...
在Android开发中,"图片OOM"是一个常见的问题,全称为"Out Of Memory",即内存溢出异常。当应用程序在运行过程中,分配给它的内存不足以处理当前的操作时,就会发生这种异常。尤其在处理大量或者高分辨率的图片时,...
OOM Killer,全称为Out of Memory Killer,是Linux内核中的一种机制,用于处理系统内存不足的情况。当系统内存耗尽时,为了避免整个系统的崩溃,OOM Killer会选择并终止一些进程来释放内存,从而确保系统的稳定运行...
OOM是Java编程语言中的一个异常,当应用程序请求的内存超过了系统分配的最大值,系统无法满足其需求时就会抛出此异常。在Android中,尤其是处理大量图片时,如果不合理地管理内存,非常容易触发OOM。 **GridView与...
在Android开发中,"OOM"(Out of Memory)是一个常见的问题,它指的是应用程序在运行过程中耗尽了可用的内存,导致系统无法分配更多的内存资源,从而引发崩溃。为了解决这个问题,开发者需要深入理解Android内存管理...
在Android开发过程中,经常会遇到一种常见的异常——OutOfMemoryError(简称OOM),这主要是因为Android为了确保设备性能与响应速度,在内存管理方面设定了严格的限制。对于每个应用程序进程,默认情况下只能使用...
GIF格式的图片包含了连续的帧,当使用默认的Bitmap解码方式时,会一次性加载所有帧到内存中,这样对于大图或者多图场景,内存消耗急剧增加,进而可能导致OOM。 针对这一问题,我们可以采取以下策略来优化GIF加载: ...
如果一个应用持续占用大量内存,系统为了保护整体稳定性和用户体验,可能会触发OOM Killer,选择性地杀死一些内存占用高的进程。 **内存泄露分析:** 内存泄露是导致OOM的常见原因之一。当一个对象不再使用但仍然被...
在Android开发中,Bitmap对象是用于处理图像的重要类,但不当使用可能会引发“Out Of Memory”(OOM)错误。Bitmap OOM通常是由于加载过大或过多的图片资源导致内存溢出。以下是对这个问题的深入探讨和解决方案。 ...
"处理android bitmap oom 2.0版本"是一个针对这个问题的解决方案更新,它旨在修复前一版本中回收Bitmap对象可能导致的问题。 1. **理解Bitmap OOM**: - OOM错误通常发生在Android系统无法为应用分配更多内存时。 ...
在Android开发中,由于系统对内存管理的特性,开发者时常会遇到Out Of Memory(OOM)问题,尤其是在处理大量图片资源时,比如在ListView或者RecyclerView中加载动态图GIF。本篇将详细介绍如何解决Android中加载GIF...