`
bolingbl
  • 浏览: 5064 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

JVM问题定位工具

    博客分类:
  • java
阅读更多

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

JProfilerOptimizeit一样,都是综合性的性能剖析工具,甚至可以分析不同方法的CPU时间占用,帮助找出CPU热点。

GCView,HP Jmeter,Garbage Cat和GC Analyzer

这几个是GC日志分析工具。

IBM HeapAnalyzer和MemoryAnalyzer

IBM HeapAnalyzerMemoryAnalyzer都是dump文件分析工具,可以观察不同对象的数量,对象之间的引用关系等等,可以协助发现内存泄露点。说明一下,我们需要把core文件和dump文件区分清楚。dump文件是堆内存的映像信息,相当于把内存中存放的对象映射到一个文件里,这个文件通常会比较大;而core文件是当前的线程栈信息,是可以使用kill -3命令生成的,也可以使用jstack命令获取。

BTrace

Btrace是一种安全和动态的跟踪分析工具,功能非常强大,可以动态分析Java程序是怎么执行的。原理是在运行时把系统中的某些类替换成包含跟踪代码的类(字节码跟踪),而跟踪代码也是用Java语言完成的。

总的来说,通常监控型的工具功能最强大,但是对系统资源要求也很高,对于生产环境上特有的问题,还是多考虑使用一些快照工具,内存和CPU占用小,系统中断时间短。

转载出自《四火的唠叨》

分享到:
评论

相关推荐

    jvm内存分析工具mat安装包

    JVM内存dump分析工具MAT独立安装包,分析内存溢出利器,可以准确定位内存异常原因,解决问题,MemoryAnalyzer-1.10.0.20200225.zip

    Android代码-JVM-Sandbox

    BTRACE好强大,也曾技痒想做一个更便捷、更适合自己的问题定位工具,既可支持线上链路监控排查,也可支持单机版问题定位。 有时候突然一个问题反馈上来,需要入参才能完成定位,但恰恰没有任何日志,甚至出现在别人...

    JVM调优工具TProfiler最新源码

    关于TProfiler实际用法及其注意事项,请参考博客《JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码》,地址:http://blog.csdn.net/defonds/article/details/52605670。

    java 性能问题定位

    jvm性能定位,以及VisualVM,ThreadAnalyzer工具的使用

    JVM调优工具Jprofiler内存泄漏定位的简单分析(附源码)(二)

    JVM调优工具Jprofiler内存泄漏定位的简单分析(附源码)(二)

    MSB企业级JVM优化与性能调优课程 解读JVM内部机制-针对性解决企业架构优化问题

    此外,课程还介绍了如何进行 JVM 线程 dump 分析和内存 dump 分析,这是快速定位问题的有力工具。包括如何进行 JVM 性能测试,包括基准测试、压力测试等。在实际调优中,测试是非常重要的环节,只

    IDEA工具jprofiler插件(JVM分析利器)

    JProfiler是一个重量级的JVM监控工具,提供对JVM精确监控,其中堆遍历、CPU剖析、线程剖析看成定位当前系统瓶颈的得力工具。可以统计压测过程中JVM的监控数据,定位性能问题。

    Java问题定位技术.pdf

    在可靠性和稳定性问题 的定位中,线程堆栈分析是最有力的武器,掌握了这个定位工具,会大大增强自己的"内功"。如果您是从C++/C转到Java上的程序员,那么线程堆栈应该不是陌生的技术,但对于原 生的Java程序员来说, ...

    JVM和性能优化学习思维笔记_swim5we_jvm_性能优化_

    java 性能调优,jvm 工具定位 深入解析

    JVM实战篇笔记.pdf

    JVM实战篇笔记,提供全方面的JVM 操作教程,定位JVM 内存溢出,堆栈使用情况,内存溢出分析,在线基于工具实时监控

    阿里开源工具 TProfiler JVM调优工具TProfiler最新源码

    关于TProfiler实际用法及其注意事项,请参考博客JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码(实测可用),地址:http://blog.csdn.net/q915730058/article/details/79136805

    Java问题定位技术(

    JVM、多线程、高并发、性能调优工具JVM、多线程、高并发、性能调优工具

    IBMjvm内存分析工具

    jvm堆快照分析工具,用于定位jvm内存泄漏或者死锁等问题

    JVM优化|java虚拟机优化

    - 掌握定位分析内存溢出的方法 - 掌握jstack命令的使用 - 掌握VisualJVM工具的使用 - 了解什么是垃圾回收 - 掌握垃圾会回收的常见算法 - 学习串行、并行、并发、G1垃圾收集器 - 学习GC日志的可视化查看 - Tomcat8的...

    Java-JVM优化视频.zip

    5 实战:内存溢出的定位与分析 6 jstack的使用 7 VisualVM工具的使用 day2: 1 什么是垃圾回收 2 垃圾回收的常见算法 3 垃圾收集器以及内存分配 4 可视化GC日志分析工具 day3: 1 Tomcat8优化 2 JVM字节码 3 代码...

    深入理解JVM内存结构及运行原理全套视频加资料.txt

     第5讲 jvm再体验-jvm可视化监控工具 免费 00:21:17  第6讲 杂谈 免费 00:12:37  第7讲 Java的发展历史 00:27:24  第8讲 Java的发展历史续 00:02:27  第9讲 Java技术体系 00:08:46  第10讲 jdk8的新特性...

    Java-JVM性能监控与故障处理工具详细介绍以及使用案例

    给一个系统定位问题的时候,知识、经验是关键基础,数据是依据。工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照文件(threaddump/javacore文件)、堆转储快照(heapdump/...

    jvm-sandbox:基于JVM的实时非侵入AOP框架容器

    JVM沙箱容器,一种JVM的非侵入式运行期AOP解决方案基于JVM的实时非侵入AOP框架容器目标人群好强大,也曾技痒想做一个更便捷,更适合自己的问题定位工具,既可支持在线远程监控排查,也可支持单机版问题定位。...

    如何快速定位线上Doris FE内存使用过高问题.pdf

    Doris集群的角色分为FE和BE。在存储层面FE负责存储和维护集群的的元数据。在计算方面FE负责接收和解析用户的查询请求,规划查询计划,调度查询结果。...JVM内存分析工具比较多,这里介绍最常用的两个工具:jmap、arthas。

    深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程

    第4节jvm初体验-内存溢出问题的分析与解决 [免费观看] 00:17:59分钟 | 第5节jvm再体验-jvm可视化监控工具 [免费观看] 00:21:17分钟 | 第6节杂谈 [免费观看] 00:12:37分钟 | 第7节Java的发展历史00:27:24分钟 | ...

Global site tag (gtag.js) - Google Analytics