修订记录:
创建: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 发现相关内存泄漏的对象占用非常打比例的内存空间,然后很容易猜测问题大概的位置,一下子就解决了。
分享到:
相关推荐
标题“Java加载dll,导致Java进程内存泄露”涉及到的是Java平台与本地库(DLL)交互时可能出现的问题。在Java中,通过Java Native Interface (JNI) 可以调用C/C++编写的动态链接库(DLL),实现Java代码与本地代码的...
"Java内存泄露_JVM监控工具介绍" Java内存泄露是Java开发中常见的一种问题,发生内存泄露可能会导致Java应用程序崩溃或性能下降。在Java中,内存泄露的原因非常多样,例如,静态变量、循环引用、数据库连接池、...
本文将详细介绍Java调试的一些核心技术和方法。 首先,Java调试的基础是JVM(Java虚拟机)提供的调试接口JDWP(Java Debug Wire Protocol)。通过IDE(集成开发环境)如Eclipse、IntelliJ IDEA等,我们可以利用这些...
### Java内存泄漏详解 #### JVM内存管理概览 在探讨Java内存泄漏之前,我们先简要回顾一下JVM(Java虚拟机)的基本架构及其内存管理机制。这有助于更好地理解内存泄漏的发生原因及其解决方法。 ##### 类装载子...
Java内存泄露是编程中一个严重的问题,它可能导致系统性能下降,甚至系统崩溃。JVM(Java虚拟机)提供了多种监控工具来帮助开发者检测和解决这类问题。本篇将重点介绍几种常用的JVM监控工具,包括jstack、jconsole、...
然而,JPDA特别适用于复杂的问题诊断,特别是涉及到多线程、内存泄漏或复杂的类加载问题时。 在使用Java调试时,了解JPDA的工作原理能够帮助开发者更有效地定位问题。例如,通过JDWP,开发者可以捕获到详细的线程...
总结起来,MAT作为一款强大的Java内存分析工具,具备了深度分析、自动化检测内存泄漏、直观的内存结构展示等功能,是Java开发者必备的调试利器。无论是排查生产环境的内存问题,还是在开发阶段优化代码,MAT都能提供...
了解这些组件的工作原理对于调试内存问题、优化性能和理解Java程序的运行机制至关重要。例如,Java栈溢出通常与递归深度过大或局部变量过多有关,而堆内存溢出则可能是因为对象创建过多或内存泄露。通过分析这些内存...
### Android内存泄漏调试经验分享 #### 一、概述 在Android开发中,内存泄漏是一个常见且需要重点关注的问题。由于Android设备通常配置有限,尤其是内存资源较为紧张,因此开发者需要格外注意避免内存泄漏的发生,...
Java内存管理是编程中至关重要的一个环节,尤其是对于大型企业级应用来说,内存泄漏和垃圾回收的优化直接关系到程序的稳定性和性能。本资料集合了一些关于垃圾回收和内存泄露解决办法的重要知识点。 1. **内存泄露*...
19. Quest JProbe:是一个 Java 内存泄漏检测工具,用于检测 Java 代码中的内存泄漏问题。 Quest JProbe 工具可以检测内存泄漏问题,并提供了详细的错误信息,以便开发者快速解决问题。 20. ej-technologies ...
总的来说,MAT作为一款强大的内存泄漏分析工具,是Java开发者不可或缺的调试利器。掌握MAT的使用方法,能够有效提升对内存管理的理解,优化应用程序性能,避免因为内存泄漏导致的系统崩溃或性能下降。
通过深入了解Java内存机制,我们可以更好地管理应用程序的内存使用,避免出现内存泄漏等问题。此外,对于本机内存的理解有助于我们更全面地诊断和解决问题。随着Java应用程序变得越来越复杂,合理配置和优化内存管理...
这些信息对于调试内存泄露问题至关重要。 #### 六、结论 综上所述,自动化测试在内存泄露测试中的应用不仅可以提高测试效率,还能有效提升软件的质量。通过合理的测试用例设计和高效的自动化测试工具,开发者能够...
MAT 是一个开源的java内存分析工具,能够快速的分析dump文件,可以直观的看到各个对象在内存占用的量大小,以及类实例的数量,对象之间的引用关系,找出对象的GC Roots相关的信息,此外还能生成内存泄露报表,疑似...
4. 难以调试:内存泄露问题往往难以定位,因为它们可能在程序运行的任何时间点产生,且症状可能延迟出现。 检测内存泄露的方法: 1. 工具辅助:许多开发环境提供了专门的工具来检测内存泄露,如iOS的Instruments,...