jvm-06:jvm虚拟机工具

1.前言

本篇文章记录一下常见的虚拟机性能监控和排查工具的作用和使用方法。

2.JDK命令行工具

jdk的bin目录下有着很多exe可执行程序,我们常用的就是java、javac运行和编译命令了。但是还有很多其它用于检测虚拟机运行状态的命令。本章对其进行介绍,学习如何使用。这些工具体积一般很小,原因在于其真正的实现是在jdk/lib/tools.jar中。

2.1 jps

这个工具的作用是否简单,就是用来检测在本系统中运行的HotSpot的进程实例,通俗的说就是运行了多少个Java程序。

image.png

-q: 只输出LVMID,省略主类的名称

-m: 输出虚拟机进程启动时传递给主类main的函数的参数

-l:输出主类的全名,如果进行执行的是Jar包,输出Jar路径

-v: 输出虚拟机进程启动时JVM参数

2.2 jstat

这个工具用于监视虚拟机各种运行状态信息的命令,是运行定位虚拟机性能问题的首选工具,显示类装载、内存、垃圾回收、JIT编译等运行数据。

image.png

jstat -gc -2764 250 20的含义就是显示gc选项,虚拟机id是2764,每隔250毫秒运行一次,一共运行20次。

可以选option参数有:

-class: 监视类装载、卸载数量、总空间以及类装载所耗费的时间

-gc: 监视Java堆状况,包括Eden、Survivor、老年代、永久代容量,使用空间,GC时间合计等信息

-gccapacity: 与-gc基本相同,但输出主要关注堆的各个区域使用到的最大、最小空间

-gcutil: 与-gc基本相同,但输出主要关注已使用空间占总空间的百分比

-gccause: 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因

-gcnew:监视新生代GC状况

-gcnewcapacity:与-gcnew基本相同,主要关注使用到的最大、最小空间

-gcold:监视老年代的GC状况

-gcoldcapacity:监视内容与-gcold基本相同,输出主要关注使用到的最大、最小空间

-gcpermcapacity:输出永久代使用到的最大、最小空间

-compiler:输出JIT编译器编译过的方法、耗时等信息

-printcompilation:输出已经被JIT编译的方法

输出的内容有很多,不同的JDK版本名称也会有些许不同,但是大同小异,这里介绍部分指标含义:

S0、S1:对应的是两个Survivor区域

E:对应的是Eden空间

O:对应的是Old空间

P:对应的是Permanent持久代

YGC:对应Minor GC的次数

YGCT:对应Minor GC的总耗时

FGC:对应Full GC的次数

FGCT:对应Full GC的总耗时

GCT:所有GC的总耗时

2.3 jinfo

这个工具可以实时查看和调整虚拟机各项参数。(不太常用)

image.png

2.4 jmap

这个命令就比较常用了,其用于生成堆的转储快照,一般是heapdump或者dump文件。此外还有其他的方式获得快照:-XX:+HeapDumpOnOutOfMemoryError,OOM异常时自动生成dump文件。通过-XX:+HeapDumpOnCtrlBreak参数可以使用Ctrl+Break键让虚拟机生成dump文件。又或者在Linux下Kill -3发送进程退出信号,也能拿到dump文件。

jmap除了获取dump文件,还能查下finalize执行队列,Java堆和永久代的详细信息。

image.png

-dump: 生成Java堆转出快照。格式是:-dump:[live, ] format=b,file=<filename> live子参数表示是否只dump出存活的对象

-finalizerinfo:显示Finalizer线程执行finalize方法的对象,只在linux/Solaris平台有效

-heap:显示堆详细信息,如使用哪种回收器、参数配置、分代状况等。只在Linux/Solaris平台有效

-histo: 显示堆中对象统计信息,包括类、实例数量、合计容量

-permstat: 以ClassLoader为统计口径显示永久代内存状态,只在Linux/Solaris平台下有效

-F :当前虚拟机进程对-dump选项没有响应时,可以使用这个选项强制生成dump快照。只在Linux/Solaris平台有效。

例如:jmap -dump:format=b,file=xx.bin pid

2.5 jhat

jmap生成了一个二进制的堆数据文件,这个文件我们无法直接使用,需要相关工具,jhat就是提供了相关功能的一个程序。其内置了一个微型的HTTP/HTML服务器,可以在浏览器上查看。除非没有其他工具,否则一般不会直接使用这个工具。

原因有两个:

1.服务器资源有限,会影响程序运行

2.分析能力不够强大,没有其他工具更方便

image.png

最简单的使用方法就是jhat xx.bin,其会开启绑定一个端口,浏览器直接访问这个端口即可。

2.6 jstack

这个命令是用于生成虚拟机当前时刻的线程快照,称为threaddump或者是javacore文件。主要目的是用于定位线程运行状态,分析死锁等原因。

image.png

-F :当正常输出的请求不被响应时,强制输出线程堆栈

-l: 除堆栈外,显示关于锁的附加信息

-m: 如果调用到本地方法的话,可以显示C/C++的堆栈

3. 可视化工具

可视化工具就不做过多介绍,在sun公司的jdk中默认有:jconsole、jvisualvm和jmc。这些都提供了图形界面,包含了上述命令行的功能,如果对前面的命令比较熟悉,使用起来也不会有太大的问题。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容