基础故障处理工具

jps: 虚拟机进程状况工具

功能:来处正在运行的虚拟机进程,并显示虚拟机执行主类名称,以及本地虚拟机唯一ID。

它是使用频率最高的命令行工具,因为其他JDK工具大多需要输入他查询到的LVMID来确定要监控的是哪一个虚拟机进程。对于本地虚拟机进程,LVMID就是操作系统的进程ID,但是如果启动了多个虚拟机进程,无法根据进程名称来定位时3,就必须依赖jps命令显示主类的功能才能区分了。

格式:

jps [ options ] [ hostid ]

参数对应的作用。

jstat:虚拟机统计信息监控工具

功能:用于监视虚拟机各种运行状态(类加载、内存、垃圾收集、即时编译)信息的命令行工具。

在存文本控制台环境的服务器上,他是运行期定位虚拟机性能问题的常用工具。

jstat格式:

jstat [ option vmid [interval[s|ms] [count]] ]

vmid在本地虚拟机中和LVMID一致,如果是远程的虚拟机进程,

格式是:[protocol:][//]lvmid[@hostname[:port]/servername]

option参数分为三类:类加载,垃圾收集、运行期编译状况。

例如:查看虚拟机进程2764的垃圾收集的具体状况。

java -gcutil 2764
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.00 6.20 41.42 47.20 16 0.105 3 0.472 0.577

S0,S1分别是Survivor0,Survivor1,里面是空的,老年代O代表Old,永久代P代表Permanent,分别使用了41.42%,47.20%空间。YGC就是年轻代GC,一共发生了16次,耗时0.105s,FGC老年代GC发生了3次,耗时0.472s,GCT代表GC一共花费了0.577s。

jinfo:Java配置信息工具

功能:实时查看和调整虚拟机各项参数。使用jps命令的-v参数可以查看虚拟机启动时显示指定的参数列表,但是如果想要知道未被显示指定的参数的系统默认值,除了查询其他资料,只剩使用jinfo -flag选项进行查询了。

jinfo命令格式:

jinfo [option] pid

例如查询CMS触发百分比的参数值

jinfo -flag CMSInitiatingOccupancyFraction 1444
-XX:CMSInitiatingOccupancyFraction=85

jmap:Java内存映像工具

功能:用于生成对转储快照(dump文件或者叫做heap dump)。还可以查询finalize执行队列、Java堆和方法区的详细信息。

其实不使用jmap,也能转储对快照,使用 -XX:+HeapDumpOnOutOfMemoryError参数,可以让虚拟机在内存溢出后自动生成堆转储快照文件。也可以用 kill -3向进程发出退出信号,也能获取堆转存快照。

jmap命令格式:

jmap [option] vmid

可选参数如下图所示

使用jmap生成dump文件,其中3500是通过jps查询到的本地虚拟机进程ID(LVMID)

jmap -dump:format=b,file=eclipse.bin 3500
Dumping heap to C:\Users\IcyFenix\eclipse.bin ...
Heap dump file created

jhat:虚拟机堆转储快照分析工具

功能:JDK提供jhat(Java Heap Analysis Tool)命令是和jmap命令配合使用,用来分析jmp生成的dump文件。

jhat内置一个微型的web服务器,生成分析结果后,可以在浏览器中查看,输入http://localhost:7000,不过不会在虚拟机运行的那台机器上用jhat分析堆转储快照,因为分析锁消耗的内存资源太大,一般会将dump文件转到其他机器上然后在用jhat分析,不过现在有比jhat更好用的分析功能。VisualVM,以及IBMHeapAnalyzer等。

使用格式:

jhat eclipse.bin
....
Server is ready.

jstack: Java堆栈跟踪工具

功能:用于生成虚拟机当前时刻的线程快照(thereaddump或者javacore文件)。

为什么要生成线程快照?其实就是说生成线程快照的作用。

为了定位线程长时间处于停顿的原因,如遇上了死循环,死锁,请求外部资源时间过长没收到响应等。通过jstack命令可以获知没有响应的线程在后台干了什么事。

jstack 格式:

jstack [option] vmid

可选参数的作用;

可视化故障处理工具

JHSDB:基于服务性代理的调试工具

JHSDB是一款基于服务性代理的进程外部调试工具。服务性代理是HotSpot虚拟机中一组用于映射Java虚拟机运行信息的、主要基于Java语言实现的API集合。它可以在独立的虚拟机的进程里分析其他虚拟机的内部数据。或者从进程内存快照中还原出他的运行细节。通过JHSDB可以找到代码中创建的对象所在的位置以及他们的引用在哪。

JConsole: Java监视与管理控制台

JConsole是一款基于JMX的可视化监视、管理工具。主要工作是通过JMX(Java Manage-ment Extensions)的MBean对系统进行信息收集和参数动态调整。而JMX是一种开放的技术,即可以用在虚拟机本身也可以用在虚拟机软件上。

启动JConsole

进入JDK/bin目录下,通过jconsole.exe启动JConsole,系统会自动搜索出本机运行的所有虚拟机进程。

内存监控

内存页签的作用相当于可视化的jstat命令,用于监视被收集器管理的虚拟机内存的变化趋势。

线程监控

点击线程标签的功能就相当于可视化jstack命令,与当了线程挺短的情况可以使用这个标签来进行分析。

VisualVM:多合-故障处理工具

VisualVM是功能最强大的运行监视和故障处理程序之一。他除了常规的运行监视、故障处理还提供了性能监分析的功能。并且它还支持大量的扩展,可以安装多数插件。

有了插件,VisualVM可以做到:

  • 显示虚拟机进程以及进程的配置、环境信息。
  • 监视应用程序的处理器、垃圾收集、堆、方法区以及线程的信息。
  • 堆转存快照分析
  • 方法级的程序运行性能分析,找出被调用最多。运行时间最长的方法。
  • 离线程序快照:收集程序的运行时配置、线程dump、内存dump等信息建立一个快照,可以将快照发送开发者处进行bug反馈。

这玩意是在JDK6 Update7中首次发布,但并不意味着他只能在JDK6及以上运行,它具有向下兼容的特性,能兼容JDK1.4.2版本。

刚开始VisualVM没有任何插件,所以先安装插件才能实现基本的功能。

手工安装插件并不常用,VisualVM的自动安装功能已可找到大多数所需的插件,在有网络连接的环境下,点击“工具->插件菜单”,弹出插件页签,在页签的“可用插件”及“已安装”中列举了当前版本VisualVM可以使用的全部插件,选中插件后在右边窗口会显示这个插件的基本信息,如开发者、版本、功能描述等。

Java Mission Control:可持续在线的监控工具

持续收集数据的JFR(Java Fight Recoder)和运行监控Java虚拟机的JMC(Java Mission Control)。

JFR是一套内嵌在HotSpot虚拟机里面的金控和基于事件的信息收集框架,在于其他的监控工具相比,JFR在生产环境中对吞吐量的影响不超过1%,并且JFR监控过程的开始和结束都是动态的,不需要重启应用。

JMC不经可以下载到独立程序,还可以作为Eclipse的插件直接使用。它与虚拟机之间采用JMX协议进行通信,一方面用来显示虚拟机MBean提供的数据,另一方面用来作为JFR的分析工具展示JFR的数据。

JFR与JMC的配合相当于录屏软件与超级播放器的组合,JFR会对选择的虚拟机(可以是本地的也可以是远程的)运行的整个过程都会保存成日志,保存到内存或者是某个文件中,然后JMC从内存或者文件中读取并展示这些事件数据,还能进行性能分析。

以垃圾搜集为例,HotSpot的MBean中一般有各个分代大小、收集次数、时间、占用率等数据(根据收集器不同有所差别),这些都属于“结果”类的信息,而JFR中还可以看到内存中这段时间分配了哪些对象、哪些在TLAB中(或外部)分配、分配速率
和压力大小如何、分配归属的线程、收集时对象分代晋升的情况等,这些就是属于“过程”类的信息,相比于结果类信息过程信息更加准确有效的分析问题。

来自《深入理解Java虚拟机第三版 周志明著》

Java虚拟机常用的性能监控工具的更多相关文章

  1. 20个常用Linux性能监控工具/命令

    20个常用Linux性能监控工具/命令 对于 Linux/Unix 系统管理员非常有用的并且最常用的20个命令行系统监视工具.这些命令可以在所有版本的 Linux 下使用去监控和查找系统性能的实际原因 ...

  2. 深入理解JAVA虚拟机之JVM性能篇---基础知识点(运行时数据区域)

    一. 运行数据区域划分 各个数据区域功能如下: 1. 程序计数器: 较小的一块内存空间,可以看做是当前线程所执行的字节码的行号指示器,每条线程都有一个独立的程序计数器,各条线程之间计数器互不影响,独立 ...

  3. Java虚拟机学习 - JDK可视化监控工具 ( 7 )

    1.JConsole JConsole工具在JDK/bin目录下,启动JConsole后,将自动搜索本机运行的jvm进程,不需要jps命令来查询指定.双击其中一个jvm进程即可开始监控,也可使用“远程 ...

  4. 深入理解JAVA虚拟机之JVM性能篇---垃圾回收

    一.基本垃圾回收算法 1. 判断对象是否需要回收的方法(如何判断垃圾): 1) 引用计数(Reference Counting)  对象增加一个引用,即增加一个计数,删除一个引用则减少一个计数.垃圾回 ...

  5. java各种链路工具性能监控工具

    Zipkin , Instana 和 Jaeger cat链路追踪系统 用于监控spring 的运行情况,比如内存,线程,池等宏观数据 spring boot admin java反编译 jar xv ...

  6. Java虚拟机性能监控与调优实战

    From:  https://c.m.163.com/news/a/D7B0C6Q40511PFUO.html?spss=newsapp&fromhistory=1 Java虚拟机性能监控与调 ...

  7. 深入理解java虚拟机【Java虚拟机垃圾收集器】

    Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK ...

  8. (转)《深入理解java虚拟机》学习笔记4——Java虚拟机垃圾收集器

    Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK ...

  9. Java虚拟机七 虚拟机监控

    jstack 用于导出Java应用程序的线程堆栈:jstack [-l] <pid> -l 选项用于打印锁的附加信息 jstack -l 2348 > /data/deadlock. ...

随机推荐

  1. 【题解】「AT4303」[ABC119D] Lazy Faith

    AT4303 [ABC119D] Lazy Faith[题解][二分] AT4303 translation 有 \(a\) 个点 \(s\),有 \(b\) 个点 \(t\),问从点 \(x\) 出 ...

  2. Python爬虫之BeautifulSoup库

    1. BeautifulSoup 1.1 解析库 1)Python标准库 # 使用方法 BeautifulSoup(markup, "html.parser") # 优势 Pyth ...

  3. js上 十九、综合案例

    十九.综合案例 题目一: 封装一个函数equal(a1,a2),传入两个一维数组,判断两个数组是否包含相同的元素,如果相等,函数的返回值为true, 不相等,函数的返回值为false 1)例:arr1 ...

  4. YouZack英语学习网站,英语四六级的福音

    YouZack英文网站 YouZack英语网站是,杨中科大佬开发给各位有需要的人使用的一个英语学习网站: 网站分两个模块: 听力模块部分图 听力模块界面 听力模块使用说明界面 背单词模块部分图 背单词 ...

  5. 你只用do-while来实现循环?太浪费了!

    这是道哥的第010篇原创 目录 前言 在宏定义中的妙用 错误的宏定义 比较好的宏定义 另一个也不错的宏定义 在函数体中的妙用 函数功能:返回错误代码对应的错误字符串 函数功能:通过TCP Socket ...

  6. 微博爬虫,python微博用户主页小姐姐图片内容采集爬虫

    python爬虫,微博爬虫,需要知晓微博用户id号,能够通过抓取微博用户主页内容来获取用户发表的内容,时间,点赞数,转发数等数据,当然以上都是本渣渣结合网上代码抄抄改改获取的! 要抓取的微博地址:ht ...

  7. Xrdp远程连接到CentOS7系统配置

    1         服务器端配置 1.1  查询是否已经安装epel库 打开已经安装了CentOS7的主机,以root用户登录,在桌面上打开一个终端,输入命令:rpm -qa|grep epel,查询 ...

  8. C# NPOI Excel多级表头导出多个表

    下载地址:https://files.cnblogs.com/files/netlock/NPOIDemo.rar

  9. 1.Redis基础命令

    重要概念 redis是单线程模型,所有命令都会进入一个队列,然后依次被执行. 全局命令 >>>select dbindex #切换数据库,默认有16个库,库标识符为0-15 > ...

  10. Vue2+Koa2+Typescript前后端框架教程--03后端路由和三层模式配置

    昨天将Koa2的基础框架和自动编译调试重启服务完成,今天开始配置路由和搭建基础的三层架构模式. 路由中间件:koa-router,即路由导航,就是我们平时使用最广泛的get/post方法执行的URL路 ...