`
fly_hyp
  • 浏览: 305694 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

java调试内存泄漏经验介绍

    博客分类:
  • Java
阅读更多

修订记录:

创建:2008年12月23日

修改:2008年12月24日  增加调试流程描述

 

 

今天要处理项目下的一个内存泄露的问题。
使用了jprobe 工具,在测试环境反复调试不能发现问题的原因。
最后使用jdk自带的jps jmap jstat 等工具顺利的查找到了内存泄露的原因。
下面对jdk自带的jps jmap jstat工具总结介绍一下,希望以后同道中人google一下,找到这篇文章对大家有所帮助。
尽量介绍的简明扼要,如果需要最详细的参考请翻阅jdk doc tools部分,如果有什么疑问请留言。

jps:
    相当于linux下的ps,列出所有java相关线程的pid等信息

    example:
        [tdwiki@installed-host-eth0 ~]$ jps    
        18861 Bootstrap
        1418 Jps

jmap:
    显示java进程内存使用的相关信息
    jmap pid                     打印内存使用的摘要信息
    jmap -histo pid >mem.txt           打印比较简单的各个有多少个对象占了多少内存的信息,一般重定向的文件
    jmap -dump:format=b,file= mem.dat pid        将内存使用的详细情况输出到mem.dat 文件
        用jhat命令可以参看 jhat -port 7000 mem.dat
        在浏览器中访问:http://10.5.22.65:7000/  查看详细信息

jstat:
    显示java虚拟机的一些统计信息
    jstat  -选项 pid 间隔显示时间 显示次数

    jstat  -gc  18861 250 10
    jstat  -gccapacity 18861 250 10
    jstat  -gcnew 18861 250 10
    jstat  -gcnewcapacity 18861 250 10
    jstat  -gcold 18861 250 10

 

我的调试流程

      内存泄漏一般都是有一定特征的,任何代码和数据都要占用内存,我简单总结内存泄漏的特征是内存占用不可控制,GC不可回收。我追踪内存使用量的曲线发现一些特征,在估计虚拟机即将崩溃时,使用 jmap -histo pid >mem.txt 发现相关内存泄漏的对象占用非常打比例的内存空间,然后很容易猜测问题大概的位置,一下子就解决了。

 

3
0
分享到:
评论
2 楼 hastune 2011-03-26  
jmap -heap pid
1 楼 axiob 2008-12-23  
可否把详细的过程补充下,现有的描述看不到经验,期待中、、、、、、

相关推荐

    Java加载dll,导致Java进程内存泄露

    标题“Java加载dll,导致Java进程内存泄露”涉及到的是Java平台与本地库(DLL)交互时可能出现的问题。在Java中,通过Java Native Interface (JNI) 可以调用C/C++编写的动态链接库(DLL),实现Java代码与本地代码的...

    Java内存泄露_JVM监控工具介绍

    "Java内存泄露_JVM监控工具介绍" Java内存泄露是Java开发中常见的一种问题,发生内存泄露可能会导致Java应用程序崩溃或性能下降。在Java中,内存泄露的原因非常多样,例如,静态变量、循环引用、数据库连接池、...

    javajava调试java调试java调试java调试

    本文将详细介绍Java调试的一些核心技术和方法。 首先,Java调试的基础是JVM(Java虚拟机)提供的调试接口JDWP(Java Debug Wire Protocol)。通过IDE(集成开发环境)如Eclipse、IntelliJ IDEA等,我们可以利用这些...

    java 内存泄漏

    ### Java内存泄漏详解 #### JVM内存管理概览 在探讨Java内存泄漏之前,我们先简要回顾一下JVM(Java虚拟机)的基本架构及其内存管理机制。这有助于更好地理解内存泄漏的发生原因及其解决方法。 ##### 类装载子...

    【转】Java内存泄露_JVM监控工具介绍jstack_jconsole_jinfo_jmap_jdb_jstat

    Java内存泄露是编程中一个严重的问题,它可能导致系统性能下降,甚至系统崩溃。JVM(Java虚拟机)提供了多种监控工具来帮助开发者检测和解决这类问题。本篇将重点介绍几种常用的JVM监控工具,包括jstack、jconsole、...

    Java调试体系及协议

    然而,JPDA特别适用于复杂的问题诊断,特别是涉及到多线程、内存泄漏或复杂的类加载问题时。 在使用Java调试时,了解JPDA的工作原理能够帮助开发者更有效地定位问题。例如,通过JDWP,开发者可以捕获到详细的线程...

    Java+内存分析工具+MAT

    总结起来,MAT作为一款强大的Java内存分析工具,具备了深度分析、自动化检测内存泄漏、直观的内存结构展示等功能,是Java开发者必备的调试利器。无论是排查生产环境的内存问题,还是在开发阶段优化代码,MAT都能提供...

    Java虚拟机 JVM 内存结构介绍

    了解这些组件的工作原理对于调试内存问题、优化性能和理解Java程序的运行机制至关重要。例如,Java栈溢出通常与递归深度过大或局部变量过多有关,而堆内存溢出则可能是因为对象创建过多或内存泄露。通过分析这些内存...

    Android 内存泄漏调试经验分享

    ### Android内存泄漏调试经验分享 #### 一、概述 在Android开发中,内存泄漏是一个常见且需要重点关注的问题。由于Android设备通常配置有限,尤其是内存资源较为紧张,因此开发者需要格外注意避免内存泄漏的发生,...

    java内存泄露资料

    Java内存管理是编程中至关重要的一个环节,尤其是对于大型企业级应用来说,内存泄漏和垃圾回收的优化直接关系到程序的稳定性和性能。本资料集合了一些关于垃圾回收和内存泄露解决办法的重要知识点。 1. **内存泄露*...

    内存泄露检测工具

    19. Quest JProbe:是一个 Java 内存泄漏检测工具,用于检测 Java 代码中的内存泄漏问题。 Quest JProbe 工具可以检测内存泄漏问题,并提供了详细的错误信息,以便开发者快速解决问题。 20. ej-technologies ...

    内存泄漏分析工具mat

    总的来说,MAT作为一款强大的内存泄漏分析工具,是Java开发者不可或缺的调试利器。掌握MAT的使用方法,能够有效提升对内存管理的理解,优化应用程序性能,避免因为内存泄漏导致的系统崩溃或性能下降。

    Java内存机制学习和使用

    通过深入了解Java内存机制,我们可以更好地管理应用程序的内存使用,避免出现内存泄漏等问题。此外,对于本机内存的理解有助于我们更全面地诊断和解决问题。随着Java应用程序变得越来越复杂,合理配置和优化内存管理...

    自动化测试在测试内存泄露中的应用

    这些信息对于调试内存泄露问题至关重要。 #### 六、结论 综上所述,自动化测试在内存泄露测试中的应用不仅可以提高测试效率,还能有效提升软件的质量。通过合理的测试用例设计和高效的自动化测试工具,开发者能够...

    MAT-Memory Analyzer Tool Java内存泄漏分析工具1.5

    MAT 是一个开源的java内存分析工具,能够快速的分析dump文件,可以直观的看到各个对象在内存占用的量大小,以及类实例的数量,对象之间的引用关系,找出对象的GC Roots相关的信息,此外还能生成内存泄露报表,疑似...

    内存泄露Demo leaky app

    4. 难以调试:内存泄露问题往往难以定位,因为它们可能在程序运行的任何时间点产生,且症状可能延迟出现。 检测内存泄露的方法: 1. 工具辅助:许多开发环境提供了专门的工具来检测内存泄露,如iOS的Instruments,...

Global site tag (gtag.js) - Google Analytics