【深入理解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区没 ...
随机推荐
- Stirng,Stringbuffer,Stringbuild的区别浅淡
String 1,Stirng是对象不是基本数据类型 2,String是final类,不能被继承.是不可变对象,一旦创建,就不能修改它的值. 3,对于已经存在的Stirng对象,修改它的值,就是重新创 ...
- spring mvc中DispatcherServlet如何得到ModelAndView的
首先看下面这种张图,这张图说明了spring mvc整体的流程. 本文讲的就是如何从DispatcherServlet中得到ModerAndView的过程. 首先看DispatherServlet这个 ...
- DBUtils工具类的使用
DBUtils工具类1.DBUtils工具类,由apache组织提供的工具类,对JDBC做了一些简单封装. 做了查询的封装,把查询的结果封装到List集合 Map集合 JavaBean对象中 做了增删 ...
- shell里面的#!
放在第一行的#! /system/bin/sh 我之前误以为是给读代码的人看的,其实不是!!是给操作系统看的,在android添加系统(服务.应用)里面的1.1中,就是因为没有添加,导致系统运行不了t ...
- TCP学习(一)
协议分层 可以看到 物理层, 链路层,网络层是所有网络设备共有的, 而传输层, 会话层, 表示层, 应用层 是存在于主机上的 各设备实现的协议层次 IP地址的表示 为什么会出现ip地址?是为了在一 ...
- Java 基础(2)——编译运行 & 规范
上节学到 Java 的编译与运行,我们已经学会了怎么去执行一个写好(假装我们已经会写了)的代码,这篇当然要试试手啦 O(∩_∩)O 哈哈~ 小试一下 新建一个 HelloAhanWhite.java ...
- ReentrantReadWriteLock简介
对象的方法中一旦加入synchronized修饰,则任何时刻只能有一个线程访问synchronized修饰的方法.假设有个数据对象拥有写方法与读方法,多线程环境中要想保证数据的安全,需对该对象的读写方 ...
- Filter---javaweb的过滤器
1.Filter是什么? Filter的基本功能是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理的前后实现一些特殊的功能. 在Servlet API中定义了三个 ...
- 运行tomcat7w.exe,提示:指定的服务未安装unable to open the service tomcat7
这是服务没安装,到tomcat的bin目录下运行 service.bat install 即可
- 廖雪峰JavaScript练习题2
请把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字.输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart'] 肯定有更简单的方法, ...