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问题定位工具的更多相关文章

  1. Java 问题定位工具 -- jps

    概览 最近老大布置的任务就是质量加固,偶然看到了一些对于 Java 性能分析的介绍,因此,有了此篇学习笔记. JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jCons ...

  2. Capsule:开源的 JVM 应用部署工具

    [编者按]本文作者 Ron Pressler 是 Parallel Universe 公司的创始人,拥有着丰富的高性能开发经验.通过这篇文章,Ron 向大家详细介绍了全新的开源 JVM 部署工具--C ...

  3. jvm系列(七):jvm调优-工具篇

    16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回顾起来还是一些还没有补充全面,其中就包括如何利用工具来监控调优前后的性能变化.工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗 ...

  4. Java 问题定位工具 ——jstack

    简介 jstack 主要用于生成虚拟机当前时刻的「线程快照」.线程快照是当前 Java 虚拟机每一条线程正在执行的方法堆栈的集合. 生成线程快照的主要目的是用于定位线程出现长时间停顿的原因,如线程间死 ...

  5. firebug定位工具很强大

    firebug这个工具很强大,如果实在找不到自己想要的元素,就安装firebug这个定位工具妥妥的

  6. 《深入理解Java虚拟机》(五)JVM调优 - 工具

    JVM调优 - 工具 JConsole:Java监视与管理控制台 JConsole是一个机遇JMX(Java Management Extensions,即Java管理扩展)的JVM监控与管理工具,监 ...

  7. Appium 自带的定位工具 Inspector

    前言:Appium Inspector是appium自带的一个元素定位工具 一.设置appium 1.点开android setting界面(机器人图标) 2.勾选Application Path,添 ...

  8. AndroidSDK 自带定位工具 uiautomatorviewer

    前言:uiautomatorviewer是androidSDK自带的定位工具 1.打开目录D:\Android\androidSDK\tools\bin 2.点击启动uiautomator,页面显示如 ...

  9. Java程序性能定位工具-火焰图

    Java程序性能定位工具-火焰图 前言 Java火焰图是一种新的查看CPU利用率方式.今天就带大家一起使用来自Google大神的工具来生成火焰图.火焰图非常的直观,问题一目了然,希望有一天它能成为JA ...

随机推荐

  1. IIs上MP4、及SVG格式加载失败解决方式

    部署项目是遇到网页播放mp4文件时候,MP4文件不能加载的问题.那是因为IIS上MIME类型中没有添加MP4的格式,添加一下即可. 解决方案: 1.在IIS上选中你的网站,然后点击右边的MIME类型, ...

  2. http中的KeepAlive

    为什么要使用KeepAlive? 终极的原因就是需要加快客户端和服务端的访问请求速度.KeepAlive就是浏览器和服务端之间保持长连接,这个连接是可以复用的.当客户端发送一次请求,收到相应以后,第二 ...

  3. ubuntu安装oracle java

    通常UBUNTU源中带有openjava,但在使用eclipse与android studio时经常会有莫名奇妙的问题,所以个人觉得还是用oracle java,省点心. 安装步骤如下: sudo a ...

  4. oracle 导入报错 ORA-00959: tablespace 'HB' does not exist

    导入oracle 时发现有几张表导入时一直报错: 报错信息:IMP-00003: ORACLE error 959 encountered   ORA-00959: tablespace 'HB' d ...

  5. RedHat6.4 用UDEV配置ASM所需磁盘

    同事在装一套RAC测试环境,结果发现原来用ASMLIB来配置磁盘,在安装GRID的时候,最终报错了,经过检查发现居然两边的磁盘不匹配.A机的sdb,sdc分别对应OCRVOL1,OCRVOL2,但是B ...

  6. PostgreSQL+PostGIS的使用 函数清单

    一. PostgreSQL与PostGIS的关系 PostgreSQL 是世界上技术最先进的开源数据库,其前身是1977年一个源于Berkeley名为Ingres的非关系型数据库,其项目领导人为Mic ...

  7. 第一个js库文件

    <!DOCTYPE html> <html xmlns=;         ;                     }                 };     })(); ...

  8. Oracle和Redhat下载地址

    Oracle RedHat 用户名:zhangwei900808@126.com 密码:@XxxxxXxxxxxx 有网友想要的,请在留言板给我留言,我会把用户名和密码发给你!

  9. linux学习笔记(3)-文件系统

    三大类文件类型 普通文件:包括文本文件.数据文件.可执行的二进制程序文件 目录文件:linux系统把目录看成一种特殊的文件,利用它构成了文件系统的树形结构 设备文件:把设备也看成是一个文件,例如你的鼠 ...

  10. 无法为请求的 Configuration 对象创建配置文件 错误原因

    Configuration config = WebConfigurationManager.OpenWebConfiguration("~"); 无法为请求的 Configura ...