JVM问题定位工具
JDB
JDB是基于文本和命令行的调试工具,Jikes在JDB的基础上提供了GUI。熟悉JDB还是有价值的,很多情况下需要我们在命令行下完成简单的debug问题定位。
|
1
2
3
|
jdb -classpath bin com.xx.Examplejdb -connect com.sun.jdi.SocketAttach:hostname=myhost,port=8000jdb -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问题定位工具的更多相关文章
- Java 问题定位工具 -- jps
概览 最近老大布置的任务就是质量加固,偶然看到了一些对于 Java 性能分析的介绍,因此,有了此篇学习笔记. JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jCons ...
- Capsule:开源的 JVM 应用部署工具
[编者按]本文作者 Ron Pressler 是 Parallel Universe 公司的创始人,拥有着丰富的高性能开发经验.通过这篇文章,Ron 向大家详细介绍了全新的开源 JVM 部署工具--C ...
- jvm系列(七):jvm调优-工具篇
16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回顾起来还是一些还没有补充全面,其中就包括如何利用工具来监控调优前后的性能变化.工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗 ...
- Java 问题定位工具 ——jstack
简介 jstack 主要用于生成虚拟机当前时刻的「线程快照」.线程快照是当前 Java 虚拟机每一条线程正在执行的方法堆栈的集合. 生成线程快照的主要目的是用于定位线程出现长时间停顿的原因,如线程间死 ...
- firebug定位工具很强大
firebug这个工具很强大,如果实在找不到自己想要的元素,就安装firebug这个定位工具妥妥的
- 《深入理解Java虚拟机》(五)JVM调优 - 工具
JVM调优 - 工具 JConsole:Java监视与管理控制台 JConsole是一个机遇JMX(Java Management Extensions,即Java管理扩展)的JVM监控与管理工具,监 ...
- Appium 自带的定位工具 Inspector
前言:Appium Inspector是appium自带的一个元素定位工具 一.设置appium 1.点开android setting界面(机器人图标) 2.勾选Application Path,添 ...
- AndroidSDK 自带定位工具 uiautomatorviewer
前言:uiautomatorviewer是androidSDK自带的定位工具 1.打开目录D:\Android\androidSDK\tools\bin 2.点击启动uiautomator,页面显示如 ...
- Java程序性能定位工具-火焰图
Java程序性能定位工具-火焰图 前言 Java火焰图是一种新的查看CPU利用率方式.今天就带大家一起使用来自Google大神的工具来生成火焰图.火焰图非常的直观,问题一目了然,希望有一天它能成为JA ...
随机推荐
- ORA-19809: 超出了恢复文件数的限制
实验环境:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod 实验背景:向tough.t中插入40万条记录,然后rollb ...
- Linux下crontab详解
1.crond介绍 crond是Linux下的任务调度命令,让系统定期执行指定程序.crond命令每分钟都会检查是否有要执行的工作,若有要执行的程序便会自动执行. linux下任务调度工作主要分两类: ...
- Web 高性能开发汇总
1. Http服务器: 让Windows Server 2008+IIS 7+ASP.NET支持10万个同时请求 大规模网站架构实战之体系结构(一) 大规模网站架构之WEB加速器SQUID(二) ii ...
- Jetty 与 Tomcat 比较,及性能分析
主流java的web容器,主要是Tomcat, jboss, jetty, resin.由于以前我们主要用的是jboss4.0.5,但jbosse用的servlet容器是tomcat5.5,所以只进行 ...
- ajax 获取 mysql 保存的图片显示
function ajax_GetFirstData(data) { var len = data.Data.length; if (len > 0) { $("#jquery_jpl ...
- Ehcache 整合Spring 使用页面、对象缓存(转载)
Ehcache在很多项目中都出现过,用法也比较简单.一般的加些配置就可以了,而且Ehcache可以对页面.对象.数据进行缓存,同时支持集群/分布式缓存.如果整合Spring.Hibernate也非常的 ...
- OneAPM 云监控部署与试用体验
作为 Zabbix 骨灰级粉丝,一直以来对第三方监控(APM)都是拒绝的.一来觉得收费,二来担心数据被人所知,三来觉得 Zabbix 牛逼到无可取代.但是,随着 APM 市场的火爆,我决定「放下身段」 ...
- C: 数组形参
知识这个东西,真是知道的越多就不知道的越多,C/C++这塘水得多深啊,哈哈.看下面3个片段:<一> 1 void fun(char a[100]) { 2 fprintf( ...
- android 动态改变listview的内容
本文模拟:点击一个按钮,为已有的listview添加一行数据 <?xml version="1.0" encoding="utf-8"?> < ...
- [矩阵快速幂]HDOJ4565 So Easy!
题意:给a, b, n, m 求 $\left \lceil ( a+ \sqrt b )^n \right \rceil$ % m 看到 $( a+ \sqrt b )^n$ 虽然很好联想到共轭 但 ...