关闭

关闭

关闭

封号提示

内容

首页 OOM(理解和探查WEBLOGIC内存泄露)

OOM(理解和探查WEBLOGIC内存泄露).ppt

OOM(理解和探查WEBLOGIC内存泄露)

lane.hu09 2012-07-17 评分 0 浏览量 0 0 0 0 暂无简介 简介 举报

简介:本文档为《OOM(理解和探查WEBLOGIC内存泄露)ppt》,可适用于IT/计算机领域,主题内容包含理解和探查内存不足内存泄漏OutOfMemoryErrorMemoryLeakAnalyzeUtilitiesDemonstrateII(AIX)理符等。

理解和探查内存不足内存泄漏OutOfMemoryErrorMemoryLeakAnalyzeUtilitiesDemonstrateII(AIX)理解和探查内存不足内存泄漏OutOfMemoryErrorMemoryLeakAnalyzeUtilitiesDemonstrateII(AIX)理解和探查内存不足内存泄漏理解和探查内存不足内存泄漏听完这次Webinar您将能够:了解Java基本内存管理基本概念了解发生内存不足内存泄漏错误的原因和症状了解如何解决内存不足内存泄漏错误MENUMENUJava内存管理的基本概念内存不足和内存泄漏错误的原因和症状使用分析工具解决内存不足和内存泄漏错误预防内存不足和内存泄漏OutOfMemory分析实例Java内存管理的基本概念Java内存管理的基本概念Java内存Java堆内存(heap)Java堆内存(heap):是JVM用于分配Java对象的内存包含活动对象和不可用对象堆大小通常是在服务器启动时使用java命令中的–Xms(最小)–Xmx(最大)标志来定义。Java内存管理的基本概念Java内存管理的基本概念本地内存(nativememory):是JVM用于其内部操作的本地内存(非Java内存)JNI代码和第三方本地模块(例如本地JDBC驱动程序)也使用本地内存最大本地内存大小取决于以下因素:操作系统进程内存大小限制已经指定用于Java堆的内存进程内存大小:位操作系统理论最大值的次方=G进程内存=Java内存+本地内存+加载的可执行文件和库+操作系统保留内存Java内存管理的基本概念Java内存管理的基本概念垃圾回收(GarbageCollection,GC):JVM自动检测和释放不再使用的内存。Java运行时JVM会执行GC这样程序员不再需要显式释放对象。通常在空闲内存降低到某一水平或内存分配达到某一数量后自动触发。以下OutOfMemory简称OOM以下MemoryLeak简称MLHeap简称“堆”Java内存问题的两种表现形式Java内存问题的两种表现形式Java内存问题的两种表现形式:内存不足错误内存泄漏错误内存不足错误--明确显示出javalangOutOfMemoryError没有空闲内存可供JVM或本地代码用于分配新对象或内存块在Java堆或本地内存中都可能发生内存泄漏错误--没有错误信息但是内存几乎耗尽已经分配好的内存或对象当不再需要没有得到释放内存曲线是一条斜向上的曲线对Java堆或本地内存都可能产生这个问题通常最终的状态就会导致OOM错误通常内存泄漏ML会导致OOM错误因此两者的探查方法完全相同!Java内存问题的两个主要发生区段Java内存问题的两个主要发生区段Java内存问题的两个主要发生区段:Java内存--包括heap堆内存和permanent区本地内存--包括JVM进程内存和java使用的第三方本地代码Java内存不足Java堆内存heap不足无法再分配新对象或内存块permanent区内存不足无法再加载类到内存中(SunHpJDK)本地内存不足物理内存不够无法再得到内存第三方本地代码有内存泄漏的Bug例如oracleocidriver本地代码JVM的JIT或者JVM本身的BugMENUMENUJava内存管理的基本概念内存不足和内存泄漏错误的原因和症状使用分析工具解决内存不足和内存泄漏错误预防内存不足和内存泄漏OutOfMemoryMemoryLeak错误实例内存不足和内存泄漏错误的典型原因()内存不足和内存泄漏错误的典型原因()物理内存不足物理内存有限例如只有G物理内存很大但是应用很多占用太多内存Swap区大小不够WeblogicServer压力太大并发用户太多大数据量分配应用例如统计报表Permanent区太小用户代码内存不释放httpsession放置了大量对象在内存分配大量数据用户自己创建太多线程调用AWT等画图接口用户代码内存泄漏问题jdbc连接没有close分配好的对象没有close和释放内存不足和内存泄漏错误的典型原因()内存不足和内存泄漏错误的典型原因()WeblogicServer配置不当给heap分配的内存太少sessiontimeout时间太长EJBpool和Cache的太大第三方Java应用的内存问题第三方Java应用也存在内存不足或者泄漏问题第三方本地代码的内存泄漏问题第二类JDBC驱动的内存泄漏例如OracleOciDriver其他第三方本地代码的内存泄漏JVM本身的内存问题JIT技术需要消耗更多的本地内存JVM本身的Bug例如GC的Bug在Java堆中发生的OOM的故障症状在Java堆中发生的OOM的故障症状如果Java堆发生OOMML:WeblogicServer运行缓慢响应速度很慢(JVM在频繁的做GCJava进程占用比较多的CPU)从console的内存监控曲线看一直徘徊在顶部最终JVM抛出javalangOutOfMemoryError异常stdout或stderr中将显示这则消息通过threaddump可以看到大部分时间所有线程都在wait只有GC线程在工作很多线程都在申请内存线程可能会异常退出(即在ThreadDump中看不到这个线程线程丢失)持续的Java堆OOMML错误偶尔也会导致JVM进程退出服务通常伴随会产生一个文本Core文件JVM退出时产生的文本Core文件JVM退出时产生的文本Core文件通常JVM异常退出伴随会产生一个文本Core文件除了OOMJVM也会因为其他原因异常退出IBMJDKjavacore****txt文件小节回顾小节回顾内存不足和内存泄漏错误的典型原因OOM错误相关故障症状在本小节中我们讲述了以下内容:MENUMENUJava内存管理的基本概念内存不足和内存泄漏错误的原因和症状使用分析工具解决内存不足和内存泄漏错误预防内存不足和内存泄漏OutOfMemory错误实例使用分析工具来分析OOM问题使用分析工具来分析OOM问题发生JavaHeapOOM问题时无法定位到问题最终的办法只能使用分析工具来做分析。常用内存分析工具HeapAnalyzerorHeapRootsforIBMJDK-离线分析HeapAnalyzerHeapRoots()HeapAnalyzerHeapRoots()HeapAnalyzerHeapRoots是一款针对IBMJDK的内存文本镜像HeapDump的分析工具特性:离线分析不影响生产系统需要得到IBMJDK内存镜像只支持IBMJDKHeapRoots字符界面HeapAnalyzer是HeapRoots的图形界面启动方式:Kill<pid>得到heapdump文件启动HeapAnalyzer或者HeapRoots加载heapdump文件图形化分析HeapAnalyzerHeapRoots()HeapAnalyzerHeapRoots()HeapDump是IBMJDKHeap内存的一个文本镜像默认生成位置在WeblogicServer启动目录下通常是Domain目录如果得不到HeapDump可能是禁止生成HeapDump的生成开关exportIBMHEAPDUMP=trueexportIBMHEAPDUMP=trueexportIBMHEAPDUMPOUTOFMEMORY=trueexportIBMJAVADUMPOUTOFMEMORY=trueexportIBMJAVACOREOUTOFMEMORY=trueexportIBMHEAPDUMPDIR=<directorypath>注意:通常HeapDump会比较大尤其是在Heap内存设置很大的情况下为了重现问题得到现场数据建议先把HeapDump调小推荐G以下在Window上如果HeapDump大于G可能会无法打开出现OOM错误启动HeapAnalyzer需要指定Xmx参数HeapAnalyzerHeapRoots()HeapAnalyzerHeapRoots()启动界面HeapAnalyzerHeapRoots()HeapAnalyzerHeapRoots()内存按树状引用关系显示HeapAnalyzerHeapRoots()HeapAnalyzerHeapRoots()内存按对象和类型显示HeapAnalyzerHeapRoots()HeapAnalyzerHeapRoots()找到怀疑泄漏的内存对象小节回顾小节回顾内存分析工具HeapAnalyzerHeapRoots在本小节中我们学习了以下内容:MENUMENUJava内存管理的基本概念内存不足和内存泄漏错误的原因和症状诊断、定位和解决内存不足和内存泄漏错误预防内存不足和内存泄漏OutOfMemory错误实例预防内存不足和内存泄漏预防内存不足和内存泄漏最好的补救不如事先的预防预防内存不足和内存泄漏系统管理代码编写预防内存不足和内存泄漏-系统管理预防内存不足和内存泄漏-系统管理系统管理足够的物理内存设置适当的Swap区大小最佳的HEAP内存设置使用最新的操作系统最新的JDK最新版本的WLS使用WeblogicServer认证的JDK尽量少使用第三方本地代码或使用Java替代方案根据应用设置适当的HttpSessionTimeout时间根据应用设置适当的EJBPoolCache预防内存不足和内存泄漏-代码编写预防内存不足和内存泄漏-代码编写代码编写不要放置大量对象到Session中不要缓存太多数据用完的资源一定要close()例如IOFileJDBC连接合理的从数据库取得适量数据XML解析对大内存的需求统计和报表业务的负荷问题小节回顾小节回顾预防内存不足和内存泄漏系统管理代码编写在本小节中我们讲述了以下内容:MENUMENUJava内存管理的基本概念内存不足和内存泄漏错误的原因和症状诊断、定位和解决内存不足和内存泄漏错误预防内存不足和内存泄漏OutOfMemory错误实例OutOfMemory错误实例OutOfMemory错误实例案例一OutOfMemory错误实例()现象OutOfMemory错误实例()现象环境IBMAIXJDKWeblogicServer刚启动很好过了一段时间用户数上来就发生OOM。自动产生heapdump和javacore文件只能重启。重启过了一段时间又是这样。OutOfMemory错误实例()收集信息OutOfMemory错误实例()收集信息GC日志JavaCore文件分析ThreadDumpHeapDump用HeapAnalyserOutOfMemory错误实例()-GC日志OutOfMemory错误实例()-GC日志<GC():freedbytes,free(),inms><GC():freedbytes,free(),inms><GC():freedbytes,free(),inms><GC():freedbytes,free(),inms><GC():freedbytes,free(),inms><GC():freedbytes,free(),inms><GC():freedbytes,free(),inms><GC():freedbytes,free(),inms><GC():freedbytes,free(),inms>********************************************<GC():freedbytes,free(),inms><GC():freedbytes,free(),inms><GC():freedbytes,free(),inms><GC():freedbytes,free(),inms><GC():freedbytes,free(),inms><GC():freedbytes,free(),inms><GC():freedbytes,free(),inms><GC():freedbytes,free(),inms><GC():freedbytes,free(),inms>OutOfMemory错误实例()-ThreadDumpOutOfMemory错误实例()-ThreadDumpTISIGINFOOUTOFMEMORYreceivedTIDATETIMEDate:at::TIFILENAMEJavacorefilename:beauserprojectsdomainsmydomainjavacoretxtXHTIMEWedMay::XHSIGRECVUnexpectedsignalreceivedatxin<unknown>ProcessingterminatedXHFULLVERSIONJREIBMAIXbuildcaCIUSERARGXmsmCIUSERARGXmxmCIUSERARGverbose:gcCIUSERARGXverbosegclog:beagclogSTHEAPFREEBytesofHeapSpaceFree:b(,)STHEAPALLOCBytesofHeapSpaceAllocated:ffefa(,,,)LKREGMONHeaplock(x):owner"ExecuteThread:''forqueue:'weblogicsocketMuxer'"(xBAEC),entrycountLKWAITERQWaitingtoenter:LKWAITER"ExecuteThread:''forqueue:'weblogickernelNonBlocking'"(xDFCA)LKWAITER"ListenThreadDefault"(xDDA)LKWAITER"weblogichealthCoreHealthMonitor"(xCE)LKWAITER"Thread"(xCBC)LKWAITER"ExecuteThread:''forqueue:'weblogicadminRMI'"(xBDA)LKWAITER"ExecuteThread:''forqueue:'weblogicadminRMI'"(xBDA)LKWAITER"ExecuteThread:''forqueue:'weblogicsocketMuxer'"(xBAFEA)LKWAITER"ExecuteThread:''forqueue:'weblogicsocketMuxer'"(xBAFA)LKWAITER"ExecuteThread:''forqueue:'weblogickernelDefault'"(xBAEA)LKWAITER"ExecuteThread:''forqueue:'weblogickernelDefault'"(xB)LKWAITER"ExecuteThread:''forqueue:'weblogickernelDefault'"(xBFF)LKWAITER"ExecuteThread:''forqueue:'weblogickernelDefault'"(xAEA)LKWAITER"ExecuteThread:''forqueue:'weblogickernelDefault'"(xAD)LKWAITER"ExecuteThread:''forqueue:'weblogickernelDefault'"(xAC)LKWAITER"ExecuteThread:''forqueue:'weblogickernelDefault'"(xEEA)LKWAITER"ExecuteThread:''forqueue:'weblogickernelDefault'"(xAB)LKWAITER"ExecuteThread:''forqueue:'weblogickernelDefault'"(xAEA)LKWAITER"ExecuteThread:''forqueue:'weblogickernelDefault'"(xAA)OutOfMemory错误实例()-ThreadDumpOutOfMemory错误实例()-ThreadDumpXMTHREADINFO"ExecuteThread:''forqueue:'weblogickernelDefault'"(TID:x,systhreadt:xAAA,state:CW,nativeID:xBC)prio=XESTACKTRACEatjavalangObjectwait(NativeMethod)XESTACKTRACEatjavalangObjectwait(Objectjava:)XESTACKTRACEatweblogickernelExecuteThreadwaitForRequest(ExecuteThreadjava:)XESTACKTRACEatweblogickernelExecuteThreadrun(ExecuteThreadjava:)XMTHREADINFO"ExecuteThread:''forqueue:'weblogickernelDefault'"(TID:x,systhreadt:xAA,state:MW,nativeID:xCD)prio=XESTACKTRACEatjavalangStringsubstring(Stringjava(CompiledCode))XESTACKTRACEatjavalangStringsubstring(Stringjava(CompiledCode))XESTACKTRACEatweblogicservletinternalWarClassFindergetSource(WarClassFinderjava(CompiledCode))XESTACKTRACEatweblogicservletinternalWebAppServletContextgetSource(WebAppServletContextjava(CompiledCode))XESTACKTRACEatweblogicservletinternalWebAppServletContextgetResourceAsSource(WebAppServletContextjava(CompiledCode))XESTACKTRACEatweblogicservletinternalWebAppServletContextgetResourceAsSource(WebAppServletContextjava(CompiledCode))XESTACKTRACEatweblogicservletinternalWebAppServletContextisResourceStale(WebAppServletContextjava(CompiledCode))XESTACKTRACEatjspservletfeebyownersearchresultisStale(searchresultjava(CompiledCode))XESTACKTRACEatweblogicservletjspJspStubisServletStale(JspStubjava(CompiledCode))XESTACKTRACEatweblogicservletinternalServletStubImplisStale(ServletStubImpljava(CompiledCode))XESTACKTRACEatweblogicservletjspJspStubcheckForReload(JspStubjava(CompiledCode))XESTACKTRACEatweblogicservletinternalServletStubImplgetServlet(ServletStubImpljava(CompiledCode))XESTACKTRACEatweblogicservletinternalServletStubImplinvokeServlet(ServletStubImpljava(CompiledCode))OutOfMemory错误实例()其他信息OutOfMemory错误实例()其他信息内存下降太快陡降!!!又陡升!!!有报表业务针对这个报表业务做压力测试个用户同时工作出现OOM!OutOfMemory错误实例()分析OutOfMemory错误实例()分析用户没有估计到报表业务的内存需求量用户调整报表业务的实现方式和技术方案OutOfMemory错误实例OutOfMemory错误实例案例二OutOfMemory错误实例()现象OutOfMemory错误实例()现象环境IBMAIXJDKWeblogicServer刚刚启动运行非常正常过了一段时间(不定)WLSheap垃圾回收出现异常<GC():markstackoverflow>但是从当时的GC日志看剩余内存还很多。如果此时不及时的重启weblogicserverheap内存会被迅速的被全部用掉OutOfMemory错误实例()答案OutOfMemory错误实例()答案GC日志ThreadDumpHeapDump用HeapAnalyserOutOfMemory错误实例()-GC日志OutOfMemory错误实例()-GC日志<AF:AllocationFailureneedbytes,mssincelastAF><AF:managingallocationfailure,action=()()><GC():markstackoverflow><GC():GCcyclestartedThuMay::<GC():freedbytes,free(),inms><GC():mark:ms,sweep:ms,compact:ms><GC():refs:soft(age>=),weak,final,phantom><AF:completedinms><GC():markstackoverflow><GC():GCcyclestartedThuMay::<GC():freedbytes,free(),inms><GC():mark:ms,sweep:ms,compact:ms><GC():refs:soft(age>=),weak,final,phantom><GC():movedobjects,bytes,reason=,usedmorebytes><GC():markstackoverflow><GC():GCcyclestartedThuMay::<GC():freedbytes,free(),inms><GC():mark:ms,sweep:ms,compact:ms><GC():refs:soft(age>=),weak,final,phantom><GC():markstackoverflow><GC():GCcyclestartedThuMay::<GC():freedbytes,free(),inms><GC():mark:ms,sweep:ms,compact:ms><GC():refs:soft(age>=),weak,final,phantom><GC():markstackoverflow><GC():GCcyclestartedThuMay::<GC():freedbytes,free(),inms><GC():mark:ms,sweep:ms,compact:ms><GC():refs:soft(age>=),weak,final,phantom><GC():markstackoverflow>OutOfMemory错误实例()-ThreadDumpOutOfMemory错误实例()-ThreadDumpTISIGINFOsignalreceivedTIDATETIMEDate:at::TIFILENAMEJavacorefilename:beauserprojectsdomainsmyomainjavacoretxtCIUSERARGverbose:gcCIUSERARGXmsmCIUSERARGXmxmCIUSERARGDIBMHEAPDUMP=TRUECIUSERARGDIBMJAVAHEAPDUMPTEXT=trueSTHEAPFREEBytesofHeapSpaceFree:a(,,)STHEAPALLOCBytesofHeapSpaceAllocated:bffa(,,)LKREGMONHeaplock(xB):owner"Signaldispatcher"(xCA),entrycountLKWAITERQWaitingtoenter:LKWAITER"ListenThreadDefault"(xDAA)LKWAITER"ExecuteThread:''forqueue:'weblogicadminRMI'"(xBDA)LKWAITER"ExecuteThread:''forqueue:'weblogicadminRMI'"(xBA)LKWAITER"ExecuteThread:''forqueue:'weblogicsocketMuxer'"(xBEA)LKWAITER"ExecuteThread:''forqueue:'weblogicsocketMuxer'"(xBA)LKWAITER"ExecuteThread:''forqueue:'weblogickernelSystem'"(xAFFA)LKWAITER"ExecuteThread:''forqueue:'weblogickernelSystem'"(xAFAA)LKWAITER"ExecuteThread:''forqueue:'weblogickernelDefault'"(xADDC)LKWAITER"ExecuteThread:''forqueue:'weblogickernelDefault'"(xA)LKWAITER"ExecuteThread:''forqueue:'weblogickernelDefault'"(xAEEE)OutOfMemory错误实例()-ThreadDumpOutOfMemory错误实例()-ThreadDumpXMTHREADINFO"ExecuteThread:''forqueue:'weblogickernelDefault'"(TID:xF,systhreadt:xA,state:MW,nativeID:xA)prio=XESTACKTRACEatjavalangObjectclone(NativeMethod)XESTACKTRACEatjavautilHashtableclone(Hashtablejava(CompiledCode))XESTACKTRACEatweblogictsrvrScavengertrigger(Scavengerjava(CompiledCode))XESTACKTRACEatweblogictimecommoninternalScheduledTriggerrun(ScheduledTriggerjava(CompiledCode))XESTACKTRACEatweblogicsecurityaclinternalAuthenticatedSubjectdoAs(AuthenticatedSubjectjava(CompiledCode))XESTACKTRACEatweblogicsecurityserviceSecurityManagerrunAs(SecurityManagerjava(CompiledCode))XESTACKTRACEatweblogictimecommoninternalScheduledTriggerexecuteLocally(ScheduledTriggerjava(CompiledCode))XESTACKTRACEatweblogictimecommoninternalScheduledTriggerexecute(ScheduledTriggerjava(CompiledCode))XESTACKTRACEatweblogictimeserverScheduledTriggerexecute(ScheduledTriggerjava(CompiledCode))XESTACKTRACEatweblogickernelExecuteThreadexecute(ExecuteThreadjava(CompiledCode))XESTACKTRACEatweblogickernelExecuteThreadrun(ExecuteThreadjava(CompiledCode))XMTHREADINFO"ExecuteThread:''forqueue:'weblogickernelDefault'"(TID:xA,systhreadt:xAA,state:CW,nativeID:x)prio=XESTACKTRACEatjavalangObjectwait(NativeMethod)XESTACKTRACEatjavalangObjectwait(Objectjava:)XESTACKTRACEatweblogickernelExecuteThreadwaitForRequest(ExecuteThreadjava:)XESTACKTRACEatweblogickernelExecuteThreadrun(ExecuteThreadjava:)XMTHREADINFO"Finalizer"(TID:xBB,systhreadt:xCC,state:R,nativeID:x)prio=XESTACKTRACEatjavanetSocketInputStreamsocketRead(NativeMethod)XESTACKTRACEatjavanetSocketInputStreamread(SocketInputStreamjava(CompiledCode))XESTACKTRACEatjavaioBufferedInputStreamfill(BufferedInputStreamjava(CompiledCode))XESTACKTRACEatjavaioBufferedInputStreamread(BufferedInputStreamjava(CompiledCode))XESTACKTRACEatsunnetTransferProtocolClientreadServerResponse(TransferProtocolClientjava(CompiledCode))XESTACKTRACEatsunnetftpFtpClientreadReply(FtpClientjava(CompiledCode))XESTACKTRACEatsunnetftpFtpClientissueCommand(FtpClientjava(CompiledCode))XESTACKTRACEatsunnetftpFtpClientcloseServer(FtpClientjava:)XESTACKTRACEatsunnetftpFtpClientfinalize(FtpClientjava:)XESTACKTRACEatjavalangrefFinalizerinvokeFinalizeMethod(NativeMethod)XESTACKTRACEatjavalangrefFinalizerrunFinalizer(Finalizerjava(CompiledCode))XESTACKTRACEatjavalangrefFinalizeraccess$(Finalizerjava(CompiledCode))XESTACKTRACEatjavalangrefFinalizer$FinalizerThreadrun(Finalizerjava(CompiledCode))OutOfMemory错误实例()-HeapDumpOutOfMemory错误实例()-HeapDumpOutOfMemory错误实例()-分析OutOfMemory错误实例()-分析GC日志中关键在Sweep时间StackOverFlowHeapDump分析对象结果显示大量Finalizer对象ThreadDump中关键看Finalizer分析:ftp连接在程序中没有及时和正常关闭导致IBMJDK垃圾回收无法快速有效的收集和回收这些连接垃圾回收中ftp连接的关闭需要很长的时间导致Sweep中排队太长堵在Sweep过程。垃圾回收无法有效的开展工作导致内存问题的出现小节回顾小节回顾二个OOMML解决实例在本小节中我们讲述了以下内容:回顾回顾内存不足内存泄漏的基本概念内存泄漏错误的原因和症状应用分析工具解决问题预防内存不足和内存泄漏OOMML实例在本次Webinar中我们讲述了以下内容:

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +1积分

资料评分:

/47
1下载券 下载 加入VIP, 送下载券

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部

举报
资料