JDB
JDB是基于文本和命令行的调试工具,Jikes在JDB的基础上提供了GUI。熟悉JDB还是有价值的,很多情况下需要我们在命令行下完成简单的debug问题定位。
1
2
3
|
jdb -classpath bin com.xx.Example jdb -connect com.sun.jdi.SocketAttach :hostname =myhost,port= 8000
jdb -connect "com.sun.jdi.CommandLineLaunch:main=Hello 1 2 3"
|
我们可能更熟悉使用下面这样的方式来进行调试,但本质上就是在使用JDB:
1
|
-agentlib :jdwp =transport=dt_socket,server=y,suspend=n,address= 9000
|
很多人都知道使用它可以连接上JVM进行远程调试,但是并不清楚这些参数的含义都是什么。那么你可以阅读一下JPDA的文档,JPDA是一种用于虚拟机和调试器之间消息传输的方式,二者谁都可以成为server,另一者则成为client。Sun发布了两种实现,一种是基于TCP/IP的(Socket传输),另一种是基于共享内存的(共享内存传输)。
- Socket传输:这也是我们最常用的调试方式,其中的命令定义和响应包的定义请参阅这两个文档JDWP规格和JDWP传输接口。这就是参数中transport=dt_socket的含义。
- 共享内存传输:参数需要改成transport=dt_shmem。这种模式只支持Windows平台,当然,客户端和服务端当然在一台机器上。
Sun虚拟机实现需要指定命令行选项,以加载JDWP(Java Debug Wire Protocol Transport)代理来debug。JDK 5.0以前需要指定-Xdebug和-Xrunjdwp这两个参数,以后则可以使用参数-agentlib:jdwp替代之,它们指定了JVM使用的连接器。从上面的例子代码可以看到几个jdwp支持的参数选项,包括transport、server、suspend、address等等,这些都很常见,还包括timeout、launch(中断并开始调试的时候,执行什么程序)、onuncaught(如果出现无法捕获的异常是否需要中断并调试)等等。
1
|
-agentlib :jdwp =transport=dt_socket,server=y,address= 8000 ,onthrow=java.io.IOException,launch=/usr/local/bin/debugstub
|
这段参数是说,在抛出IO异常时,中断并执行debugstub。
早些时候JVM曾经因为开放这样的debug端口,遇到远程扫描,虚拟机发生崩溃,参见bug链接。
VisualVM和JConsole
VisualVM这个工具来自Netbeans的项目,JVM的运行情况一目了然。它已经被收录到JDK的官方工具中去了,官网上面可以找到很多插件,这是这个工具尤其出色的地方。
JConsole也集成在JDK的工具中,图形化地监视虚拟机的状态。
jinfo/jmap/jhat/jstack/jstat
这几个命令行工具可以很方便地查看当前虚拟机的参数信息、堆、内存图、线程堆栈和垃圾回收信息,它们非常常用,不需要预先使用参数增加虚拟机开启的端口。其中,jhat命令尤其强大,它可以把堆中的对象导出成为html文件,比较两次虚拟机快照的不同,同时还支持对象查询语句来查询堆中对象的状态。
JProfiler和Optimizeit
JProfiler和Optimizeit一样,都是综合性的性能剖析工具,甚至可以分析不同方法的CPU时间占用,帮助找出CPU热点。
GCView,HP Jmeter,Garbage Cat和GC Analyzer
这几个是GC日志分析工具。
IBM HeapAnalyzer和MemoryAnalyzer
IBM HeapAnalyzer和MemoryAnalyzer都是dump文件分析工具,可以观察不同对象的数量,对象之间的引用关系等等,可以协助发现内存泄露点。说明一下,我们需要把core文件和dump文件区分清楚。dump文件是堆内存的映像信息,相当于把内存中存放的对象映射到一个文件里,这个文件通常会比较大;而core文件是当前的线程栈信息,是可以使用kill -3命令生成的,也可以使用jstack命令获取。
BTrace
Btrace是一种安全和动态的跟踪分析工具,功能非常强大,可以动态分析Java程序是怎么执行的。原理是在运行时把系统中的某些类替换成包含跟踪代码的类(字节码跟踪),而跟踪代码也是用Java语言完成的。
总的来说,通常监控型的工具功能最强大,但是对系统资源要求也很高,对于生产环境上特有的问题,还是多考虑使用一些快照工具,内存和CPU占用小,系统中断时间短。
转载出自《四火的唠叨》
相关推荐
对于JVM问题的定位,除了依赖于具体的工具之外,还需要具备一定的系统思考能力,以便能够从全局角度出发,分析问题的根本原因。这包括: 1. **系统性思考**:将问题放在整个系统的大背景下考虑,识别出是明显的错误...
### JVM问题定位的典型案例分析 #### 一、背景与概述 在现代软件开发过程中,Java虚拟机(JVM)作为Java应用程序运行的基础平台,其稳定性和性能至关重要。然而,在实际应用中,由于各种复杂的因素,可能会遇到JVM...
总的来说,MAT JVM内存分析工具是Java开发者不可或缺的调试工具,它能有效地帮助我们找到并解决内存问题,提高应用程序的稳定性和效率。通过深入理解和熟练使用MAT,开发者可以更好地管理和优化Java应用的内存资源。
MAT,全称Memory Analyzer Tool,是IBM开发的一款强大的Java虚拟机(JVM)内存分析工具,尤其适用于Mac OS X平台。这款工具可以帮助开发者诊断和解决Java应用中的内存泄漏问题,提高应用性能。MAT通过深入分析堆转储...
MAT,全称Memory Analyzer Tool,是IBM开发的一款强大的JVM内存分析工具,尤其适用于诊断Java应用程序的内存泄漏问题。在Java开发过程中,内存溢出(Out Of Memory)问题常常会导致程序异常终止,而MAT就是解决这类...
IntelliJ IDEA(简称Idea)作为广受欢迎的Java集成开发环境,提供了一系列强大的工具来帮助开发者进行性能调优,其中就包括JProfiler11这款强大的JVM内存分析工具。本文将详细介绍如何使用Idea中的JProfiler11插件,...
例如,首先使用`jstat`监控JVM的实时状态,发现可能的性能问题后,用`jmap`生成heap dump,最后借助MAT进行深入的内存分析。通过这种方式,开发者可以找出内存泄漏、优化内存分配、改进垃圾收集效率,进而提升Java...
Java JVM瓶颈定位是一个涉及多方面的问题,需要综合运用各种工具和技巧进行诊断和优化。理解JVM的工作原理,熟练使用监控工具,以及掌握Java代码的优化原则,都是提升系统性能的关键。通过持续学习和实践,开发者...
通过合理利用 VisualVM 及其集成的命令行工具,开发者能够有效地监控和分析 JVM 的内存使用情况,及时发现并解决内存泄漏、GC 效率低下等问题。掌握这些工具的使用方法,对于任何 Java 开发者而言都是必备技能。
这些JVM监控工具提供了全面的洞察力,帮助开发者调试问题、优化性能和理解应用程序的行为。熟悉并掌握它们的使用,是Java开发和运维工作中的重要技能。在实际操作中,应根据具体情况选择合适的工具,以实现高效的...
在使用MAT进行内存分析时,开发者需要注意正确配置JVM以生成heap dumps,然后利用MAT的多种视图和报告来定位问题。通过理解MAT的这些特性,开发者可以更有效地调试和优化Java应用程序,确保其在运行时能高效且稳定地...
通过本文介绍的JVM命令工具,我们可以有效地监控和诊断Java应用程序的问题,从而提升应用的整体性能和稳定性。这些工具简单易用,但在实际开发和运维工作中却能发挥重要作用。希望本文能够帮助读者更好地理解和掌握...
IBM HeapAnalyzer是一款强大的Java虚拟机(JVM)内存分析工具,专为诊断和解决Java应用程序的内存泄漏问题而设计。这个工具能够帮助开发者深入理解Java应用程序的内存使用情况,从而优化性能并防止由于内存泄漏导致...
MAT通过解析JVM生成的hprof文件(内存快照),可以深入分析堆内存的各个部分,包括对象分配、存活状态、引用关系等,帮助定位问题所在。 MAT的主要功能包括: 1. **对象概览**:提供一个整体的内存分配情况,展示...
《JVM排查工具MAT在JDK 11中的应用与OOME问题解决》 Java虚拟机(JVM)是Java程序运行的基础,然而在复杂的系统环境中,内存管理问题时常出现,其中最典型的便是OutOfMemoryError(OOME)。为了解决这类问题,...
这些工具可以帮助开发者快速定位问题所在,提高系统的稳定性和响应速度。此外,对于更复杂的性能问题,还可以结合其他工具如`jmap`、`jstat`、`VisualVM`等进行综合分析。在实际开发和运维过程中,熟练掌握这些工具...
"Jvm堆栈dump文件分析"是指通过特定工具对这些dump文件进行解析,以便诊断和解决问题。 IBM提供了一款名为HeadAnalyzer的工具,版本4.1.4,专门用于分析Java堆栈信息,尤其适用于WebSphere应用服务器环境。...
"jvm调优实用工具.rar"这个压缩包文件显然是为了提供帮助开发者进行JVM优化的相关工具和资料。其中特别提到了一个名为JProfiler的工具,它是一个强大的Java性能分析器,对理解和调整JVM的运行有着极大的帮助。 **...
《Java问题定位技术(书签版)—JVM调优》这本书可能涵盖了以上这些内容,通过深入学习,开发者可以掌握更高级的故障排查技巧,比如使用`jmap`、`jhat`等工具进行堆内存分析,或者利用`jfr`进行飞行记录,获取详细的...
VisualVM还支持分析内存快照和线程快照,帮助开发者定位内存泄漏和死锁问题。 总的来说,JConsole和VisualVM都是强大的JVM监控工具,它们提供了丰富的功能来协助开发者进行性能优化。JConsole简洁易用,适合日常的...