当前位置:首页 > 攻略

【cfoutofmemory怎么解决】应用服务器发生内存溢出怎么办?有助于解决问题的两个工具

问题说明

对于B/S体系结构中的J2EE应用程序系统,在应用程序服务器上出现内存溢出错误是一个非常困难的问题,故障排除的关键是确定问题出在哪里。常见的内存溢出原因包括:

Jvm内存参数设置不合理

例如:

-Xmx设置相对较小

-Xms设置太大

未设置Sun的JVM

-XX:MaxPermSize大小等

由于参数设置问题导致的内存溢出往往很容易找到,因此调整参数基本上可以解决问题。

应用程序服务器没有必需的修补程序

例如,某些版本的Websphere有很多性能缺陷,在某些情况下,可能会出现内存溢出。应用修补程序后,可以基本解决问题。

应用程序代码有缺陷

这些问题是内存溢出的最常见原因,本文介绍了如何分析和查找这些内存溢出问题。

解决方法

孔欲想做好那件事,首先要利用那个机构,有好的工具,解决问题往往可以事半功倍,很多时候没有工具支持,问题就很难解决。

本文主要讨论两种工具的使用。

分析JavaCore的工具:IBM thread and monitor dump analyzer for Java。

分析Heapdump的工具:Eclipse Memory Analyzer。

这两个工具基本上可以定位常见的内存溢出问题。

在介绍这两个工具之前,我们将讨论一些相关概念。

Heapdump

Java进程内存在特定时间点的快照,记录内存中每个对象当时的存储和引用关系等。Heapdump不包含对对象的调用信息。这意味着Heapdump无法确定对象生成到的程序代码。

扎瓦斯科尔

记录特定时间点所有线程的执行堆栈信息等的Java进程的线程快照。在JavaCore中,您可以查看每个线程正在处理哪些程序代码、当前Java“在做什么”、线程的执行堆栈中的代码调用信息、对象生成相关信息等。

两个内存溢出

内存溢出一般分为两种。内存使用量过多,内存泄漏。

过度使用意味着短时间内大量内存急剧耗尽,导致内存溢出。

内存泄漏是指长时间内内存逐渐耗尽,导致内存溢出。时间可以是几个小时或几天(打开详细的垃圾收集,可以清楚地观察内存分配)。

Java系统中的内存溢出很少发生内存泄漏,因为内存使用过度。本文后面介绍的也是内存使用过度导致内存溢出的分析方法。

对于内存使用过度导致的内存溢出,可以将Heapdump与JavaCore相结合来分析定位问题;对于内存泄漏,可以主要分析Heapdump。

Heapdump文件和Javacore文件(例如用于部署Websphere的web应用程序)通常在Java进程遇到内存溢出错误时创建,如果发生内存溢出,则位于以下目录

/opt/IBM/WebSphere/appserver/profiles/server 1中出现以下文件:

Heapdump。*。phd文件记录Heapdump信息,JavaCore .*。txt记录javacore信息,在正常内存溢出时,会出现多个PhD文件和JavaCore文件。分析时使用其中一个即可。

下面介绍了如何通过工具分析两个文件,以及如何分析两个文件以找到内存溢出(内存过度使用导致的内存溢出)的来源。

1.javacore分析

Javacore的分析工具IBM thread and monitor dump analyzer for Java(JCA)以图形方式显示Java线程的堆栈信息和相互关系等。以下是工具使用的屏幕截图。

ticle.detail&_iz=31825&index=3" width="640" height="464"/>

对于 Websphere,主要关注 WebContainer 线程的执行堆栈情况,上图显示WebContainer:57 号线程的执行堆栈。Javacore 文件本身就是个文本文件,直接通过文本编辑器如 editplus 也可以打开,下面是用文本编辑器打开 javacore 文件后看到的WebContainer:57 号线程的执行堆栈:

可以看到,通过 JCA 打开 javacore 和通过 editplus 打开 javacore,没有本质的区别,只是展现形式有所区别而已,有关 JCA 工具的具体使用这里不作详细介绍。分析 javacore的重点是根据每个线程的堆栈信息找出哪个或哪几个线程导致 java 进程的内存溢出,对应线程堆栈中的代码段就是罪魁祸首。例如,如果通过分析得到 WebContainer:57 号线程可能导致内存溢出,那么 57 号线程中的这段代码就是问题所在。

为什么是 WebContainer:57 号线程有问题,而不是其它线程呢?这就需要结合heapdump 进行综合分析,下面会有详细介绍。

2.分析 Heapdump

Heapdump 的分析工具推荐 Eclipse Memory Analyzer(简称 MAT),该工具比 IBM 的HA(Heap Analyzer)工具更强大,更易使用。下面是工具的使用截图:

该工具可以看到对象占用内存的大小、对象的个数等信息,通过分析占用内存比例最大的对象,可以初步判断是哪个对象导致的内存溢出,有关 MAT 工具的具体使用这里不作详细介绍。heapdump 分析的重点是找到占用内存最大的“业务对象”,所谓业务对象,就是和应用业务相关的对象,需要能靠到应用程序上。例如上图所示,虽然java.lang.String 比 DicRestrict 对象占用的内存要多,但是我们做分析时应该重点关注DicRestrict 对象,因为 String 对象是通用的业务无关对象,可能很多业务对象都会引用它。Heapdump 分析需要结合业务知识,需要相当的开发和业务经验。

3.双剑合并

Javacore 和 heapdump 的单独分析,都只是看到了事情的一面,通过一定方法将二者有机的结合起来,问题基本就可以水落石出了。

……

由于作者版权要求,仅展示文章的一部分,如需阅读完整版文章,可以私信回复”文章“即可免费获取。

最后:

1)关注+私信回复:“测试”,可以免费领取一份10G软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Mysql数据库、抓包工具、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试等。

2)关注+私信回复:"入群" 就可以邀请你进入软件测试群学习交流~~

1.《【cfoutofmemory怎么解决】应用服务器发生内存溢出怎么办?有助于解决问题的两个工具》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《【cfoutofmemory怎么解决】应用服务器发生内存溢出怎么办?有助于解决问题的两个工具》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/2589952.html

上一篇

【非诚勿扰首轮全灭】不要在汽车维修小伙子里非打扰不可,电灯完全熄灭,受辱,汪汪叫笑,认识的人都理解。

下一篇

【t1无缘世界赛】T1无痛错过S10,赛后李哥默默不答地自责忏悔,登录外网上热搜。

【cfoutofmemory怎么解决】阿里面试:说说强引用、软引用、弱引用、虚引用。

  • 【cfoutofmemory怎么解决】阿里面试:说说强引用、软引用、弱引用、虚引用。
  • 【cfoutofmemory怎么解决】阿里面试:说说强引用、软引用、弱引用、虚引用。
  • 【cfoutofmemory怎么解决】阿里面试:说说强引用、软引用、弱引用、虚引用。

【cfoutofmemory怎么解决】“手机内存”英语怎么说?我带你看看手机文件夹里的那些英语。

  • 【cfoutofmemory怎么解决】“手机内存”英语怎么说?我带你看看手机文件夹里的那些英语。
  • 【cfoutofmemory怎么解决】“手机内存”英语怎么说?我带你看看手机文件夹里的那些英语。
  • 【cfoutofmemory怎么解决】“手机内存”英语怎么说?我带你看看手机文件夹里的那些英语。
【cfoutofmemory怎么解决】稀疏常见问题摘要

【cfoutofmemory怎么解决】稀疏常见问题摘要

cfoutofmemory怎么解决相关介绍,一.火花SQL相关 执行Insert语句时报告错误,堆栈信息为FileSystem closed。经常出现在ThriftServer里面。原因:多线程线程closedFileSystem可能会导致BU...

【cfoutofmemory怎么解决】历史上最完整的UG打开和保存提示内存不足的解决方案

  • 【cfoutofmemory怎么解决】历史上最完整的UG打开和保存提示内存不足的解决方案
  • 【cfoutofmemory怎么解决】历史上最完整的UG打开和保存提示内存不足的解决方案
  • 【cfoutofmemory怎么解决】历史上最完整的UG打开和保存提示内存不足的解决方案
【cfoutofmemory怎么解决】Android应用OOM问题分析及解决方案

【cfoutofmemory怎么解决】Android应用OOM问题分析及解决方案

cfoutofmemory怎么解决相关介绍,1.什么是OOM? 03-21 21:05:28 . 771: e/dalvikvm-heap(13316): out of memory on a 10485776-byte allocation ...

【cfoutofmemory怎么解决】Win10系统CF中出现out  of  memory解决步骤!

【cfoutofmemory怎么解决】Win10系统CF中出现out of memory解决步骤!

cfoutofmemory怎么解决相关介绍,[PConline信息] Win10系统CF出现outofmemory怎么办?很多用户在玩CF时会出现outofmemory的系统提示,出现这种情况的原因有很多。下一篇在Win10系统CF中列出了ou...

【cfoutofmemory怎么解决】6399:死亡细胞埋在骨头里的out  of  memory如何解决?

【cfoutofmemory怎么解决】6399:死亡细胞埋在骨头里的out of memory如何解决?

cfoutofmemory怎么解决相关介绍,6399:埋葬死亡细胞的奥图奥莫里如何解决?很多玩家在《死亡细胞》卖场结束时暴露了奥图奥莫里的bug,不知道是怎么回事。如何解决这个bug?从下一篇6399篇开始,我将分享死亡细胞。 死亡细胞掩埋ou...

【cfoutofmemory怎么解决】CF历届游戏路线图你从哪个时代开始的?

【cfoutofmemory怎么解决】CF历届游戏路线图你从哪个时代开始的?

cfoutofmemory怎么解决相关介绍,还记得当时拿着P90的吴某吗?贴吧一位老玩家精心整理了穿越火线历届游戏的加载界面截图。后面没有更新,但看到这些画,小小的编制热泪盈眶。充满回忆! 这次给大家带来的是CF历代装载图。希望大家喜欢。 有些...