欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    java理解和探查内存不足内存泄漏.ppt

    • 资源ID:5373873       资源大小:852.51KB        全文页数:47页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    java理解和探查内存不足内存泄漏.ppt

    理解和探查内存不足/内存泄漏OutOfMemoryError/Memory Leak Analyze&Utilities Demonstrate II(AIX),理解和探查内存不足/内存泄漏,听完这次Webinar,您将能够:了解Java基本内存管理基本概念了解发生内存不足/内存泄漏错误的原因和症状了解如何解决内存不足/内存泄漏错误,3,MENU,Java内存管理的基本概念内存不足和内存泄漏错误的原因和症状使用分析工具解决内存不足和内存泄漏错误预防内存不足和内存泄漏OutOfMemory分析实例,4,Java内存管理的基本概念,Java内存Java 堆内存(heap)Java 堆内存(heap):是 JVM 用于分配 Java 对象的内存,包含活动对象和不可用对象 堆大小通常是在服务器启动时使用 java 命令中的 Xms(最小)Xmx(最大)标志来定义。,5,Java内存管理的基本概念,本地内存(native memory):是 JVM 用于其内部操作的本地内存(非Java内存)JNI 代码和第三方本地模块(例如,本地 JDBC 驱动程序)也使用本地内存 最大本地内存大小取决于以下因素:操作系统进程内存大小限制 已经指定用于 Java 堆的内存进程内存大小:32位操作系统,理论最大值2的32次方4G进程内存 Java 内存 本地内存 加载的可执行文件和库 操作系统保留内存,6,Java内存管理的基本概念,垃圾回收(Garbage Collection,GC):JVM自动检测和释放不再使用的内存。Java 运行时JVM会执行 GC,这样程序员不再需要显式释放对象。通常在空闲内存降低到某一水平或内存分配达到某一数量后自动触发。以下OutOfMemory 简称 OOM以下Memory Leak 简称 MLHeap简称“堆”,7,Java内存问题的两种表现形式,Java内存问题的两种表现形式:内存不足错误内存泄漏错误内存不足错误明确显示出java.lang.OutOfMemoryError没有空闲内存可供 JVM 或本地代码用于分配新对象或内存块 在 Java 堆或本地内存中都可能发生内存泄漏错误没有错误信息,但是内存几乎耗尽 已经分配好的内存或对象,当不再需要,没有得到释放 内存曲线是一条斜向上的曲线对 Java 堆或本地内存都可能产生这个问题 通常最终的状态就会导致 OOM 错误通常内存泄漏ML会导致 OOM错误,因此两者的探查方法完全相同!,8,Java内存问题的两个主要发生区段,Java内存问题的两个主要发生区段:Java内存包括heap堆内存和permanent区本地内存包括JVM进程内存和java使用的第三方本地代码Java内存不足Java堆内存heap不足,无法再分配新对象或内存块 permanent区内存不足,无法再加载类到内存中(Sun&Hp JDK)本地内存不足物理内存不够,无法再得到内存 第三方本地代码有内存泄漏的Bug,例如oracle oci driver本地代码 JVM的JIT或者JVM本身的Bug,9,MENU,Java内存管理的基本概念内存不足和内存泄漏错误的原因和症状使用分析工具解决内存不足和内存泄漏错误预防内存不足和内存泄漏OutOfMemory/Memory Leak错误实例,10,内存不足和内存泄漏错误的典型原因(1),物理内存不足物理内存有限,例如只有1G物理内存很大,但是应用很多,占用太多内存Swap区大小不够Weblogic Server压力太大并发用户太多大数据量分配应用,例如统计报表Permanent区太小用户代码内存不释放http session放置了大量对象在内存分配大量数据用户自己创建太多线程调用AWT等画图接口用户代码内存泄漏问题jdbc连接没有close分配好的对象没有close和释放,11,内存不足和内存泄漏错误的典型原因(2),Weblogic Server配置不当给heap分配的内存太少session timeout时间太长EJB pool和Cache的太大第三方Java应用的内存问题第三方Java应用也存在内存不足或者泄漏问题第三方本地代码的内存泄漏问题第二类JDBC驱动的内存泄漏,例如Oracle Oci Driver其他第三方本地代码的内存泄漏JVM本身的内存问题JIT技术需要消耗更多的本地内存JVM本身的Bug,例如GC的Bug,12,在 Java 堆中发生的 OOM 的故障症状,如果 Java 堆发生 OOM/ML:Weblogic Server运行缓慢,响应速度很慢(JVM在频繁的做GC,Java进程占用比较多的CPU)从console的内存监控曲线看,一直徘徊在顶部最终JVM抛出 java.lang.OutOfMemoryError 异常,stdout 或 stderr 中将显示这则消息 通过thread dump可以看到大部分时间所有线程都在wait,只有GC线程在工作很多线程都在申请内存线程可能会异常退出(即在 Thread Dump 中看不到这个线程,线程丢失)持续的Java 堆OOM/ML错误偶尔也会导致JVM进程退出服务,通常伴随会产生一个文本Core文件,13,JVM退出时产生的文本Core文件,通常JVM异常退出伴随会产生一个文本Core文件除了OOM,JVM也会因为其他原因异常退出IBM JDK-javacore*.txt文件,14,小节回顾,内存不足和内存泄漏错误的典型原因OOM 错误相关故障症状,在本小节中,我们讲述了以下内容:,15,MENU,Java内存管理的基本概念内存不足和内存泄漏错误的原因和症状使用分析工具解决内存不足和内存泄漏错误预防内存不足和内存泄漏OutOfMemory错误实例,16,使用分析工具来分析OOM问题,发生Java Heap OOM 问题时,无法定位到问题,最终的办法只能使用分析工具来做分析。常用内存分析工具HeapAnalyzer or HeapRoots for IBM JDK离线分析,17,HeapAnalyzer/HeapRoots(1),HeapAnalyzer/HeapRoots是一款针对IBM JDK的内存文本镜像HeapDump的分析工具特性:离线分析,不影响生产系统需要得到IBM JDK内存镜像只支持IBM JDKHeapRoots字符界面,HeapAnalyzer是HeapRoots的图形界面启动方式:Kill-3 得到heapdump文件启动HeapAnalyzer或者HeapRoots,加载heapdump文件图形化分析,18,HeapAnalyzer/HeapRoots(2),HeapDump是IBM JDK Heap内存的一个文本镜像,默认生成位置在Weblogic Server启动目录下,通常是Domain目录 如果得不到HeapDump,可能是禁止生成HeapDump的生成开关export IBM_HEAPDUMP=trueexport IBM_HEAP_DUMP=trueexport IBM_HEAPDUMP_OUTOFMEMORY=trueexport IBM_JAVADUMP_OUTOFMEMORY=trueexport IBM_JAVACORE_OUTOFMEMORY=trueexport IBM_HEAPDUMPDIR=注意:通常HeapDump会比较大,尤其是在Heap内存设置很大的情况下为了重现问题,得到现场数据,建议先把HeapDump调小,推荐1G以下在Window上,如果HeapDump大于1G,可能会无法打开,出现OOM错误启动HeapAnalyzer需要指定-Xmx参数,19,HeapAnalyzer/HeapRoots(3),启动界面,20,HeapAnalyzer/HeapRoots(4),内存按树状引用关系显示,21,HeapAnalyzer/HeapRoots(5),内存按对象和类型显示,22,HeapAnalyzer/HeapRoots(6),找到怀疑泄漏的内存对象,23,小节回顾,内存分析工具HeapAnalyzer/HeapRoots,在本小节中,我们学习了以下内容:,24,MENU,Java内存管理的基本概念内存不足和内存泄漏错误的原因和症状诊断、定位和解决内存不足和内存泄漏错误 预防内存不足和内存泄漏OutOfMemory错误实例,25,预防内存不足和内存泄漏,最好的补救不如事先的预防预防内存不足和内存泄漏系统管理代码编写,26,预防内存不足和内存泄漏系统管理,系统管理足够的物理内存,设置适当的Swap区大小最佳的HEAP内存设置使用最新的操作系统/最新的JDK/最新版本的WLS使用Weblogic Server认证的JDK尽量少使用第三方本地代码,或使用Java替代方案根据应用设置适当的HttpSession Timeout时间根据应用设置适当的EJB Pool/Cache,27,预防内存不足和内存泄漏代码编写,代码编写不要放置大量对象到Session中不要缓存太多数据用完的资源一定要close(),例如IO,File,JDBC连接合理的从数据库取得适量数据XML解析对大内存的需求统计和报表业务的负荷问题,28,小节回顾,预防内存不足和内存泄漏系统管理代码编写,在本小节中,我们讲述了以下内容:,29,MENU,Java内存管理的基本概念内存不足和内存泄漏错误的原因和症状诊断、定位和解决内存不足和内存泄漏错误 预防内存不足和内存泄漏OutOfMemory错误实例,30,OutOfMemory错误实例,案 例 一,31,OutOfMemory错误实例(1)现象,环境IBM AIX 5.2,JDK1.4.2,Weblogic Server 813刚启动很好,过了一段时间,用户数上来,就发生OOM。自动产生heapdump和javacore文件只能重启。重启过了一段时间又是这样。,32,OutOfMemory错误实例(1)收集信息,GC日志JavaCore文件分析Thread DumpHeapDump用HeapAnalyser,33,OutOfMemory错误实例(1)GC日志,*,34,OutOfMemory错误实例(1)Thread Dump,1TISIGINFO OUTOFMEMORY received 1TIDATETIME Date:2005/05/11 at 15:56:131TIFILENAME Javacore filename:/bea/user_projects/domains/mydomain/javacore696496.1115798173.txt1XHTIME Wed May 11 15:56:13 20051XHSIGRECV Unexpected signal-1 received at 0 x0 in.Processing terminated.1XHFULLVERSION J2RE 1.4.2 IBM AIX build ca1420-200406262CIUSERARG-Xms1024m2CIUSERARG-Xmx1024m2CIUSERARG-verbose:gc2CIUSERARG-Xverbosegclog:/bea/gc.log1STHEAPFREE Bytes of Heap Space Free:45b8(17,848)1STHEAPALLOC Bytes of Heap Space Allocated:3ffefa00(1,073,674,752)2LKREGMON Heap lock(0 x30071788):owner ExecuteThread:0 for queue:weblogic.socket.Muxer(0 x7BA1EC20),entry count 23LKWAITERQ Waiting to enter:3LKWAITER ExecuteThread:2 for queue:weblogic.kernel.Non-Blocking(0 x7DF83CA0)3LKWAITER ListenThread.Default(0 x7D9D78A0)3LKWAITER weblogic.health.CoreHealthMonitor(0 x7C6E3320)3LKWAITER Thread-5(0 x7C25BC20)3LKWAITER ExecuteThread:2 for queue:weblogic.admin.RMI(0 x7BD332A0)3LKWAITER ExecuteThread:0 for queue:weblogic.admin.RMI(0 x7BD298A0)3LKWAITER ExecuteThread:2 for queue:weblogic.socket.Muxer(0 x7BA1FEA0)3LKWAITER ExecuteThread:1 for queue:weblogic.socket.Muxer(0 x7BA1F8A0)3LKWAITER ExecuteThread:149 for queue:weblogic.kernel.Default(0 x7B4AE3A0)3LKWAITER ExecuteThread:143 for queue:weblogic.kernel.Default(0 x7B180920)3LKWAITER ExecuteThread:142 for queue:weblogic.kernel.Default(0 x7B0F8F20)3LKWAITER ExecuteThread:128 for queue:weblogic.kernel.Default(0 x7A98E6A0)3LKWAITER ExecuteThread:127 for queue:weblogic.kernel.Default(0 x7A906D20)3LKWAITER ExecuteThread:122 for queue:weblogic.kernel.Default(0 x7A660C20)3LKWAITER ExecuteThread:107 for queue:weblogic.kernel.Default(0 x79E6EA20)3LKWAITER ExecuteThread:100 for queue:weblogic.kernel.Default(0 x79AB6420)3LKWAITER ExecuteThread:99 for queue:weblogic.kernel.Default(0 x79A2EA20)3LKWAITER ExecuteThread:98 for queue:weblogic.kernel.Default(0 x799A70A0),35,OutOfMemory错误实例(1)Thread Dump,3XMTHREADINFO ExecuteThread:81 for queue:weblogic.kernel.Default(TID:0 x30106330,sys_thread_t:0 x790A5AA0,state:CW,native ID:0 x5B5C)prio=54XESTACKTRACE at java.lang.Object.wait(Native Method)4XESTACKTRACE at java.lang.Object.wait(Object.java:443)4XESTACKTRACE at weblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:153)4XESTACKTRACE at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:172)3XMTHREADINFO ExecuteThread:98 for queue:weblogic.kernel.Default(TID:0 x30105890,sys_thread_t:0 x799A70A0,state:MW,native ID:0 x6C6D)prio=54XESTACKTRACE at java.lang.String.substring(String.java(Compiled Code)4XESTACKTRACE at java.lang.String.substring(String.java(Compiled Code)4XESTACKTRACE at weblogic.servlet.internal.WarClassFinder.getSource(WarClassFinder.java(Compiled Code)4XESTACKTRACE at weblogic.servlet.internal.WebAppServletContext.getSource(WebAppServletContext.java(Compiled Code)4XESTACKTRACE at weblogic.servlet.internal.WebAppServletContext.getResourceAsSource(WebAppServletContext.java(Compiled Code)4XESTACKTRACE at weblogic.servlet.internal.WebAppServletContext.getResourceAsSource(WebAppServletContext.java(Compiled Code)4XESTACKTRACE at weblogic.servlet.internal.WebAppServletContext.isResourceStale(WebAppServletContext.java(Compiled Code)4XESTACKTRACE at jsp_servlet._feebyowner._search_result._isStale(_search_result.java(Compiled Code)4XESTACKTRACE at weblogic.servlet.jsp.JspStub.isServletStale(JspStub.java(Compiled Code)4XESTACKTRACE at weblogic.servlet.internal.ServletStubImpl.isStale(ServletStubImpl.java(Compiled Code)4XESTACKTRACE at weblogic.servlet.jsp.JspStub.checkForReload(JspStub.java(Compiled Code)4XESTACKTRACE at weblogic.servlet.internal.ServletStubImpl.getServlet(ServletStubImpl.java(Compiled Code)4XESTACKTRACE at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java(Compiled Code),36,OutOfMemory错误实例(1)其他信息,内存下降太快,陡降!又陡升!有报表业务针对这个报表业务做压力测试,10个用户同时工作,出现OOM!,37,OutOfMemory错误实例(1)分析,用户没有估计到报表业务的内存需求量用户调整报表业务的实现方式和技术方案,38,OutOfMemory错误实例,案 例 二,39,OutOfMemory错误实例(2)现象,环境IBM AIX 5.2,JDK1.4.2,Weblogic Server 813刚刚启动,运行非常正常过了一段时间(不定),WLS heap垃圾回收出现异常,但是从当时的GC日志看,剩余内存还很多。如果此时不及时的重启weblogic server,heap内存会被迅速的被全部用掉,40,OutOfMemory错误实例(2)答案,GC日志Thread DumpHeapDump用HeapAnalyser,41,OutOfMemory错误实例(2)GC日志,=32),weak 42,final 1563,phantom 0=32),weak 24,final 1370,phantom 0=32),weak 24,final 1527,phantom 0=32),weak 14,final 1405,phantom 0=32),weak 10,final 99,phantom 0,42,OutOfMemory错误实例(2)Thread Dump,1TISIGINFO signal 3 received 1TIDATETIME Date:2005/05/05 at 17:33:361TIFILENAME Javacore filename:/bea/user_projects/domains/myomain/javacore417864.1115285616.txt2CIUSERARG-verbose:gc2CIUSERARG-Xms256m2CIUSERARG-Xmx1536m2CIUSERARG-DIBM_HEAPDUMP=TRUE2CIUSERARG-DIBM_JAVA_HEAPDUMP_TEXT=true1STHEAPFREE Bytes of Heap Space Free:6a67858(111,573,080)1STHEAPALLOC Bytes of Heap Space Allocated:11bffa00(297,794,048)2LKREGMON Heap lock(0 x30071B28):owner Signal dispatcher(0 x3666C3A0),entry count 13LKWAITERQ Waiting to enter:3LKWAITER ListenThread.Default(0 x3D29A2A0)3LKWAITER ExecuteThread:1 for queue:weblogic.admin.RMI(0 x3B73D1A0)3LKWAITER ExecuteThread:0 for queue:weblogic.admin.RMI(0 x3B7374A0)3LKWAITER ExecuteThread:2 for queue:weblogic.socket.Muxer(0 x3B436EA0)3LKWAITER ExecuteThread:1 for queue:weblogic.socket.Muxer(0 x3B4338A0)3LKWAITER ExecuteThread:1 for queue:weblogic.kernel.System(0 x3AFF23A0)3LKWAITER ExecuteThread:0 for queue:weblogic.kernel.System(0 x3AF6AA20)3LKWAITER ExecuteThread:77 for queue:weblogic.kernel.Default(0 x3ADD3C20)3LKWAITER ExecuteThread:65 for queue:weblogic.kernel.Default(0 x3A776820)3LKWAITER ExecuteThread:64 for queue:weblogic.kernel.Default(0 x3A6EEE20),43,OutOfMemory错误实例(2)Thread Dump,3XMTHREADINFO ExecuteThread:65 for queue:weblogic.kernel.Default(TID:0 x70066F60,sys_thread_t:0 x3A776820,state:MW,native ID:0 x494A)prio=54XESTACKTRACE at java.lang.Object.clone(Native Method)4XESTACKTRACE at java.util.Hashtable.clone(Hashtable.java(Compiled Code)4XESTACKTRACE at weblogic.t3.srvr.Scavenger.trigger(Scavenger.java(Compiled Code)4XESTACKTRACE at mon.internal.ScheduledTrigger.run(ScheduledTrigger.java(Compiled Code)4XESTACKTRACE at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java(Compiled Code)4XESTACKTRACE at weblogic.security.service.SecurityManager.runAs(SecurityManager.java(Compiled Code)4XESTACKTRACE at mon.internal.ScheduledTrigger.executeLocally(ScheduledTrigger.java(Compiled Code)4XESTACKTRACE at mon.internal.ScheduledTrigger.execute(ScheduledTrigger.java(Compiled Code)4XESTACKTRACE at weblogic.time.server.ScheduledTrigger.execute(ScheduledTrigger.java(Compiled Code)4XESTACKTRACE at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java(Compiled Code)4XESTACKTRACE at weblogic.kernel.ExecuteThread.run(ExecuteThread.java(Compiled Code)3XMTHREADINFO ExecuteThread:63 for queue:weblogic.kernel.Default(TID:0 x700670A0,sys_thread_t:0 x3A6674A0,state:CW,native ID:0 x4748)prio=54XESTACKTRACE at java.lang.Object.wait(Native Method)4XESTACKTRACE at java.lang.Object.wait(Object.java:443)4XESTACKTRACE at weblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:153)4XESTACKTRACE at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:172)3XMTHREADINFO Finalizer(TID:0 x7006B8B0,sys_thread_t:0 x3677CC20,state:R,native ID:0 x304)prio=84XESTACKTRACE at.SocketInputStream.socketRead0(Native Method)4XESTACKTRACE at.SocketInputStream.read(SocketInputStream.java(Compiled Code)4XESTACKTRACE at java.io.BufferedInputStream.fill(BufferedInputStream.java(Compiled Code)4XESTACKTRACE at java.io.BufferedInputStream.read(BufferedInputStream.java(Compiled Code)4XESTACKTRACE at.TransferProtocolClient.readServerResponse(TransferProtocolClient.java(Compiled Code)4XESTACKTRACE at.ftp.FtpClient.readReply(FtpClient.java(Compiled Code)4XESTACKTRACE at.ftp.FtpClient.issueCommand(FtpClient.java(Compiled Code)4XESTACKTRACE at.ftp.FtpClient.closeServer(FtpClient.java:188)4XESTACKTRACE at.ftp.FtpClient.finalize(FtpClient.java:738)4XESTACKTRACE at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)4XESTACKTRACE at java.lang.ref.Finalizer.runFinalizer(Finalizer.java(Compiled Code)4XESTACKTRACE at java.lang.ref.Finalizer.access$100(Finalizer.java(Compiled Code)4XESTACKTRACE at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java(Compiled Code),44,OutOfMemory错误实例(2)HeapDump,45,OutOfMemory错误实例(2)分析,GC日志中关键在Sweep时间/StackOverFlowHeapDump分析对象结果显示大量Finalizer对象Thread Dump中关键看Finalizer分析:ftp连接在程序中没有及时和正常关闭,导致IBM JDK垃圾回收无法快速有效的收集和回收这些连接 垃圾回收中,ftp连接的关闭需要很长的时间,导致Sweep中排队太长,堵在Sweep过程。垃圾回收无法有效的开展工作,导致内存问题的出现,46,小节回顾,二个OOM/ML解决实例,在本小节中,我们讲述了以下内容:,47,回顾,内存不足/内存泄漏的基本概念内存泄漏错误的原因和症状应用分析工具解决问题预防内存不足和内存泄漏OOM/ML实例,在本次Webinar中,我们讲述了以下内容:,

    注意事项

    本文(java理解和探查内存不足内存泄漏.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开