【深入理解JAVA虚拟机】第二部分.内存自动管理机制.4.JVM工具
1、概述
工具作用:性能监控与故障处理
工作原理:分析数据
数据包含:运行日志、 异常堆栈、 GC日志、 线程快照(threaddump/javacore文件)、 堆转储快照(heapdump/hprof文件)等。
2、JDK命令行工具
JDK命令行是jdk/lib/tools.jar 的封装,所以都很小。
其他的工具,都是JDK命令行的封装。
jps:虚拟机进程状况工具(JVM Process StatusTool)
jps 也就是 JVM里的 ps。
jstat:虚拟机统计信息监视工具 (JVM Statistics Monitoring Tool)
是用于监视虚拟机各种运行状态信息的命令行工具。
它可以显示本地或者远程[1]虚拟机进程中的类装载、 内存、 垃圾收集、 JIT编译等运行数据 。
jinfo:Java配置信息工具 (Configuration Info for Java)
jinfo的作用是实时地查看和调整虚拟机各项参数。
jmap:Java内存映像工具 (Memory Map for Java)
jmap命令用于生成堆转储快照(一般称为heapdump或dump文件)。
jhat:虚拟机堆转储快照分析工具 (JVM Heap Analysis Tool)
jstack:Java堆栈跟踪工具 (Stack Trace for Java)
用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)。
HSDIS:JIT生成代码反汇编

3、JDK可视化工具
JConsole:Java监视与管理控制台
旧了
VisualVM:多合一故障处理工具 (All-in-One Java Troubleshooting Tool)
优点:
1、基于JVM,不需要Agent
2、支持插件 -- 可扩展
已有常用功能:
显示虚拟机进程以及进程的配置、 环境信息(jps、 jinfo)。
监视应用程序的CPU、 GC、 堆、 方法区以及线程的信息(jstat、 jstack)。
dump以及分析堆转储快照(jmap、 jhat)。
方法级的程序运行性能分析,找出被调用最多、 运行时间最长的方法。
离线程序快照:收集程序的运行时配置、 线程dump、 内存dump等信息建立一个快照,可以将快照发送开发者处进行Bug反馈。
一定支持热补丁的插件
BTrace动态日志跟踪:
在不停止目标程序运行的前提下,通过HotSpot虚拟机的HotSwap技术动态加入原本并不存在的调试代码。
这项功能对实际生产中的程序很有意义:经常遇到程序出现问题,但排查错误的一些必要信息,譬如方法参数、 返回值等,在开发时并没有打印到日志之中,以至于不得不停掉服务,通过调试增量来加入日志代码以解决问题。
BTrace的用法还有许多,打印调用堆栈、 参数、 返回值只是最基本的应用,在它的网站上有使用BTrace进行性能监视、 定位连接泄漏和内存泄漏、 解决多线程竞争问题等例子
4、其他工具
除了JDK自带的工具之外,常用的故障处理工具还有很多,如果读者使用的是非Sun系列的JDK、 非HotSpot的虚拟机,就需要使用对应的工具进行分析,如:
IBM的Support Assistant[1]、 Heap Analyzer [2]、 Javacore Analyzer [3]、 Garbage CollectorAnalyzer[4]适用于IBM J9 VM。
HP的HPjmeter[5]、 HPjtune适用于HP-UX、 SAP、 HotSpot VM。Eclipse的Memory Analyzer Tool [6](MAT)适用于HP-UX、 SAP、 HotSpot VM,安装IBM DTFJ插件后可支持IBM J9 VM。
BEA的JRockit Mission Control[7]适用于JRockit VM。
【深入理解JAVA虚拟机】第二部分.内存自动管理机制.4.JVM工具的更多相关文章
- 【深入理解JAVA虚拟机】第二部分.内存自动管理机制.3.垃圾收集器与内存分配策略
1.学习目的 当需要排查各种内存溢出. 内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节. Java内存运行时区域的各个部分,其中程序计数 ...
- 【深入理解JAVA虚拟机】第二部分.内存自动管理机制.5.调优实战
高性能硬件上的程序部署策略 在高性能硬件上部署程序,目前主要有两种方式: 通过64位JDK来使用大内存. -- 缺点:GC停顿时间长 使用若干个32位虚拟机建立逻辑集群来利用硬件资源. -- 思 ...
- 【深入理解JAVA虚拟机】第二部分.内存自动管理机制.2.HotSpot虚拟机对象探秘
对象的创建过程 1.加载类 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载. 解析和初始化过. 如果没有,那必须 ...
- 【深入理解JAVA虚拟机】第二部分.内存自动管理机制.1.内存区域
1.内存区域 根据<Java虚拟机规范(Java SE 7版)> 的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如图所示. 程序计数器 当前线程所执行的字节码的行号指 ...
- 《深入理解 java 虚拟机》学习 -- 内存分配
<深入理解 java 虚拟机>学习 -- 内存分配 1. Minor GC 和 Full GC 区别 概念: 新生代 GC(Minor GC):指发生在新生代的垃圾收集动作,因为 Java ...
- 深入理解java虚拟机-第二章:java内存区域与内存泄露异常
2.1概述: java将内存的管理(主要是回收工作),交由jvm管理,确实很省事,但是一点jvm因内存出现问题,排查起来将会很困难,为了能够成为独当一面的大牛呢,自然要了解vm是怎么去使用内存的. 2 ...
- 深入理解java虚拟机-第二章
第2章 Java内存区域与内存溢出异常 运行数据区域 1.程序计数器(Program Counter Register) 是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器. 2.J ...
- (转)《深入理解java虚拟机》学习笔记6——类加载机制
Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程. 在加载阶段,java虚拟机需要完成以下 ...
- 深入理解JAVA虚拟机原理之内存分配策略(二)
更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 1.对象优先在Eden分配 大多情况,对象在新生代Eden区分配.当Eden区没 ...
随机推荐
- Python爬虫抓取某音乐网站MP3(下载歌曲、存入Sqlite)
最近右胳膊受伤,打了石膏在家休息.为了实现之前的想法,就用左手打字.写代码,查资料完成了这个资源小爬虫.网页爬虫, 最主要的是协议分析(必须要弄清楚自己的目的),另外就是要考虑对爬取的数据归类,存储. ...
- orcale 之 集合操作
集合操作就是将两个或者多个 sql 查询的结果合并成复合查询.常见的集合操作有UNION(并运算).UNION ALL.INTERSECT(交运算)和MINUS(差运算). UNION UNION 运 ...
- java实现任务调度
最近的一个小项目是做一个简单的数据仓库,需要将其他数据库的数据抽取出来,并通过而出抽取成页面需要的数据,以空间换时间的方式,让后端报表查询更快. 因为在抽取的过程中,有一定的先后顺序,需要做一个任务调 ...
- 九度oj 1001 A+B for Matrices 2011年浙江大学计算机及软件工程研究生机试真题
题目1001:A+B for Matrices 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:15235 解决:6172 题目描述: This time, you are supposed ...
- 模拟登陆Github示例
首先进入github登录页:https://github.com/login 输入账号密码,打开开发者工具,在Network页勾选上Preserve Log(显示持续日志),点击登录,查看Sessio ...
- vmstat命令——监控给定时间间隔的服务器的状态值
vmstat n m 时间间隔为n秒,采集m组数据vmstat n 时间间隔为n秒 # vmstat 2 3 procs -----------memory---------- ---swap ...
- C#操作Redis List 列表
/// <summary> /// Redis 列表 /// </summary> public static void Redis_List() { RedisClient ...
- SQL 工具系列一
1.误删除数据恢复篇 ApexSQL Recover 可以恢复Delete Truncate drop,恢复 二进制大型对象 测试版本 每10行才会恢复 评估版本下载地址:只能用14天 所以基 ...
- Swift可选链
//可选链测试 class Person{ var residence:Residence! var name:String init(name:String){ self.name = name } ...
- java web 开发入门
Java web,是java技术用来解决web互联网领域的技术总和.Java web技术主要包括客户端和服务端,java在客户端的服务有java applet,不过用的非常少,大部分应用在服务端,比如 ...