`

websphere 内存溢出处理

阅读更多
  1. 启用进程跟踪,可以产生native_stderr.log文件,通过分析工具分析分析这个文件,可以知道有哪些对象没有被释放等信息。默认WebSphere不启用这个功能,要启用这个功能参考http://www-01.ibm.com/support/docview.wss?rs=180&uid=swg21114927
  2. Java虚拟机发生一次堆内存申请失败(Allocation Failure),由于Java虚拟机规范规定,在发生Allocation Failure之后必须进行GC操作,Java虚拟机会进行一次GC操作。所以系统缓慢的原因在于

    <1> 对象的内存申请失败
    <2>频繁的GC本身会占用大量CPU时间。

    同时,如果内存申请操作连续失败,即使GC之后也不能申请内存,就会发生core dump,并且同时存在heapdump文件,这说明WebSphere系统发生了内存溢出(OOM)。

    频繁发生GC和系统core dump的原因是一致的,即内存总是申请失败(Allocation Failure)。
  3. 通常情况下,频繁发生core dump是由于以下两类原因导致
    1 内存泄漏

    堆内存申请失败通常是由于系统中存在大量不能被GC操作所删除的对象,由于GC只删除没有引用指向的对象,所以,如果在编程的时候没有消除对过期对象的引用(将引用置为null),那么此过期对象就无法被删除。大量的过期对象会导致大量的堆内存被占用。

    2 内存碎片问题

    通常情况下,对于Java虚拟机出现,只需要配置heap最大最小值,以及maxPermSize,但是这种情况仅限于SUN的Java虚拟机。对于IBM的JVM,情况就完全不一样

    对于Sun的JVM来说,它的GC策略默认是复制、分代算法。也就是说,它会将heap分成不同的几个区,譬如Solaris JVM中最上面有两个大小相等的区。GC时刻,将一个区的存活对象复制到另外一个对等区,垃圾对象就算遗弃了。这样在heap里面,就不存在碎片问题。

    另外Sun的JVM有单独的方法区,也就是Permanent Generation,方法区中保存的一般是Class对象,而不是普通的实例对象,也就是JVM的元数据。

    IBM的JVM默认GC策略并没有采取复制、分代。这个可以从GC日志分析出来。它不像Sun的JVM那样,有个单独的方法区,它的方法区就放在Java Heap里面。在IBM的JVM里面,这些对象一般分配在称为k-cluster和p-cluster里(cluster又是属于Heap),而后者一般是临时在heap里面申请。并且,这些cluster是不能GC,或是被移动重排的(Compact过程)。这就导致Java Heap里面就如同蜂窝,但不同的蜂孔又不能合并,于是,当我们程序里面产生一个大对象,譬如2M的数组(数组必须分配在连续的内存区)时,就没有可分配空间了,于是就报告OOM。这些不能被移动的cluster之间的空隙就称为所谓的碎片。此时,JVM的Heap利用率可能不到50%。

    再说一个细节,k-cluster能够存放1280个类对象,第一个p-cluster大小为16K,默认存放类似于JNI对象和线程对象等不能移动的对象(pinned),然后k-cluster中存放不下的类对象也会放在p-cluster中,第一个p-cluster满了之后,后续的p-cluster大小只有2K,一个类对象大小是256字节。

    此类碎片问题无法通过重整解决。碎片只是一个通俗的说法,正确的含义是每两个p簇之前的空隙过小,可以视为碎片。由于p簇是不能移动不能删除的,所以碎片的大小完全是由类的加载情况决定的。也就是说可能某次was启动之后恰巧不会oom,也可能启动不久就会oom。

    要想完全解决,只能通过实验测试出恰当的-Xp和-Xk的值
    所以,升级到1.3.1 SR7以后的版本就可以用-xK和-xP了。
    说到底,这是IBM JVM 1.4设计上的缺陷,IBM JVM 1.5已经不存在P、K族的问题了,并且1.5的GC机制已经在向SUN的实现靠拢,在JVM的实现中,SUN/HP是一个流派,JRocket/IBM是一个流派,当中数IBM最异类,JRocket虽然不使用分代GC机制,但却很少出现OOM的问题
    IBM JDK 1.5已经重新写了JVM。据说GC算法改了,碎片问题应该会好很多。
  4. http://www.itpub.net/viewthread.php?tid=942211&extra=&page=1
  5. http://blog.csdn.net/zwhfyy/archive/2007/01/18/1486474.aspx
  6. http://www.blogjava.net/tacy/archive/2008/03/16/186666.html
  7. http://blog.chinaunix.net/u/32831/showart_386177.html

分享到:
评论
1 楼 ln_lz 2013-11-29  

相关推荐

    websphere内存溢出

    【标题】:WebSphere内存溢出 在Java应用程序服务器中,WebSphere是一个广泛使用的平台,用于部署和管理企业级的应用程序。然而,由于其复杂的内存管理和高并发特性,WebSphere可能会遇到内存溢出的问题,这可能...

    java IBM websphere 内存溢出 javacore deapdump CPU内存分析工具

    Java IBM WebSphere应用服务器在运行过程中可能会遇到各种性能问题,其中最常见的挑战之一是内存溢出。内存溢出是指应用程序消耗的内存超过了系统所能提供的限制,导致程序崩溃或性能急剧下降。在这种情况下,开发者...

    websphere查看内存溢出工具ha456.jar

    总之,ha456.jar是一个强大的Websphere内存溢出诊断工具,能够帮助开发者定位和解决内存管理问题,提升应用的稳定性和性能。通过深入理解和有效利用这样的工具,可以在面对复杂的企业级应用环境时,更好地管理和优化...

    was内存溢出 javacore分析工具jca 456

    总之,对于WebSphere内存溢出问题,Javacore分析工具JCA 456是开发者的重要助手,它能帮助我们快速定位问题,有效地解决问题,保证系统的稳定运行。正确理解和使用这类工具,对于提升企业应用的性能和可靠性至关重要...

    Weblogic内存溢出优化设置

    ### Weblogic内存溢出优化设置详解 #### 一、解决中文显示问题 在Weblogic环境中,如果遇到中文显示异常的情况,通常是因为操作系统本身不支持中文字符集。为了解决这个问题,可以通过修改`startweblogic.sh`...

    内存溢出资料

    在提供的文件名中,"WebSphere应用服务器+最佳实践分享++--内存溢出(OOM)分析.pdf"可能包含关于如何在WebSphere环境下预防和处理OOM的具体策略和最佳实践。文档可能涵盖了调整服务器配置、优化应用代码、使用监控...

    websphere分析工具

    这款工具集可以帮助开发者和管理员深入理解Websphere运行时环境,识别并解决各种性能问题,包括内存溢出、线程死锁以及垃圾回收问题。在本文中,我们将详细探讨这些关键问题及其解决方案。 首先,内存溢出是Java...

    ibm内存查看工具.zip

    IBM内存查看工具是一款专为解决IBM WebSphere Application Server (WAS) 内存溢出问题而设计的应用程序。它能够帮助管理员深入理解WAS的内存使用情况,有效地分析内存升降关系,以及对日志文件和内存溢出文件进行...

    Websphere日常监控手册

    - **IBM_HEAPDUMP_OUTOFMEMORY**: 当遇到内存溢出时,自动触发堆转储,设置为`true`。 - **IBM_JAVADUMP_OUTOFMEMORY**: 遇到内存溢出时,自动生成Java核心文件,设置为`true`。 - **IBM_JAVA_HEAPDUMP_TEXT**: 生成...

    网管监控Websphere的性能指标

    - **非堆内存**:包括元空间、代码缓存等,查看其占用情况以避免溢出问题。 - **垃圾回收**:监控GC频率和耗时,过高可能影响应用响应速度。 2. **CPU使用率** 监控WebSphere进程的CPU使用率,过高可能表示存在...

    Websphere性能调优

    调整JVM的主要目的是确保应用程序能够在资源约束下高效运行,避免内存溢出等问题。具体操作是在Websphere管理控制台中,通过路径“服务器-&gt;应用程序服务器-&gt;server1-&gt;Java和进程管理-&gt;进程定义-&gt;Java虚拟机”进行...

    java内存分析指引07_v0.2.doc

    内存溢出的迹象可能在WebSphere的日志文件中表现为异常信息,系统性能下降,直至服务器崩溃。在IBM WebSphere上,启用“自动堆转储”后,当内存溢出发生时,会在特定目录下生成`javacore*`和`heapdump*`文件,这些...

    websphere 调优报告

    面对这一问题,解决方案的核心在于修改部署于WebSphere上的应用程序,特别是针对Java堆内存中对象处理的代码部分,目标是减少Java堆中的对象数量,从而避免内存溢出的情况再次发生。 具体策略包括: 1. **优化数据...

    Websphere优化文档

    通过调整这些参数,可以减少垃圾回收的频率和时间,避免内存溢出,同时确保应用有足够的内存来处理请求。 其次,连接池优化旨在高效管理数据库连接。连接池提供了一种复用机制,避免了频繁创建和销毁连接的开销。...

    WebSphere脚本监控.docx

    - **JVM**:监控堆内存使用,如总内存(Heapsize)、已用内存(UsedMemory)和内存使用百分比(Usedmemorypercent),预防内存溢出(OutOfMemory)。 - **Servlet会话管理器**:跟踪会话创建、活动和销毁,优化...

    WebSphere参数调优.txt

    合理设置堆大小可以避免内存溢出和频繁的垃圾回收操作。 **调优建议:** - **初始堆大小**:根据应用的实际情况设置初始堆大小,一般推荐设置为最大堆大小的1/4。 - **共享内存**:如果多个应用程序服务器共享同一...

    IBM WebSphere JavaCore分析工具

    2. **内存分析**:分析工具可能包括对内存使用情况的检查,尤其是在发生内存泄漏或溢出时,能够提供有关内存分配和释放的详细信息。 3. **JVM配置审查**:通过分析JavaCore,工具可以提供关于JVM配置的见解,例如...

    weblogic&websphere性能指标

    在IT领域,特别是针对企业级应用服务器的性能监控与优化,WebLogic与WebSphere作为业界领先的中间件平台,其性能指标的深入理解至关重要。本文旨在从给定的文件信息出发,详细解读WebLogic的部分关键性能指标,以...

Global site tag (gtag.js) - Google Analytics