虚拟机性能监控与故障处理工具

一、JDK命令行工具
(一)jps :虚拟机进程状况工具
①列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID。
②jps命令格式
jps [options] [hostid]
③jps工具主要选项
jps -q 只输出LVMID,省略主类的名称
jps -m 输出虚拟机启动时传递给主类main()函数的参数
jps -l 输出主类的全名,如果进程执行的是jar包,输出jar路径
jps -v 输出虚拟机进程启动时jvm参数
(二)jstat :虚拟机统计信息监视工具
①用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、
JIT编译等运行数据。
②主要命令
jstat -class pid 显示加载class的数量,及所占空间等信息。
jstat -compiler pid :显示VM实时编译的数量等信息。
jstat -gc pid :可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young
gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
jstat -gccapacity
:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,
如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内
存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存
占用量。其他的可以根据这个类推, OC是old内纯的占用量。
jstat -gcnew pid :new对象的信息。
jstat -gcnewcapacity pid :new对象的信息及其占用量
jstat -gcold pid :old对象的信息。
jstat -gcoldcapacity pid :old对象的信息及其占用量。
jstat -gcpermcapacity pid : perm对象的信息及其占用量。
jstat -util pid :统计gc信息统计。
jstat -printcompilation pid :当前VM执行的信息。
③除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一
次,一共打印6次,还可以加上-h3每三行显示一下标题。
(三)jinfo :Java配置信息工具
①实时的查看和调整虚拟机各项参数
②常用命令:
jps的-v 参数可以查看虚拟机启动时显式指定的参数列表。
jinfo的 - flag选项进行查询未被显式指定的参数的系统默认值。
使用 -flag name=value 或者 -flag [+|-] name 修改一部分运行期可写的虚拟机参数值
(四)jmap : Java内存映像工具
①用于生成堆转储快照
②还可以查询finalize执行队列、Java堆和永久代的详细信息,如空间使用率、当前用的是哪种收集器等。
③主要命令:
jmap -dump pid 生成Java堆转储快照
jmap -finalizerinfo pid 显示在F-QUEUE中等待Finalizer线程执行finalize方法的对象,只在linux/Solaris平台下
有效
jmap -heap pid 显示Java堆详细信息,如使用哪种回收器、参数配置、分代情况等。只在Linux/Solaris
平台下有效
jmap -histo pid 显示堆中对象统计信息,包括类、实例数量、合计容量
jmap -permstat pid 以ClassLoader为统计口径显示永久代内存状态,只在Linux、Solaris下有效
jmap -F pid 当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照,只在
Linux/Solaris平台下有效
(五)jhat:虚拟机堆转储快照分析工具
jhat与jmap配合使用,jhat内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,可以在浏览器中查
看。
实例分析:
首先,通过jps 命令查到LVMID,然后执行:jmap -dump:format=b,file=eclipse.bin LVMID,返回值末尾为“Heap
dump file create”
然后执行:jhat eclipse.bin,返回值末尾为:“Sever is ready”
然后在浏览器中输入:http://localhost:7000/ ,即可看到分析结果。
(六)jstack :Java堆栈跟踪工具
①用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)。线程快照就是当前虚拟机内每一条线
程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程死锁,死循环,请求外部资
源导致的长时间等待等都是线程长时间停顿的常见原因。
②jstack工具主要选项
jstack -F pid 当正常输出的请求不被响应的时,强制输出线程堆栈
jstack -l pid 除堆栈外,显示关于锁的附加信息
jstack -m pid 如果调用本地方法的话,可以显示C/C++的堆栈
*:在jdk1.5中,java.lang.Thread类新增了一个getAllStackTraces()方法用于获取虚拟机中所有线程的StackTraceElement对
象。使用这个方法可以通过简单的几行代码就完成jstack的大部分功能。
(七)HSDIS: JIT生成代码反汇编
HSDIS 是一个SUN官方推荐的HotSpot虚拟机JIT编译代码的反汇编插件,它包含在HotSpot虚拟机的源代码之中,但没
有提供编译后的程序。
它的作用是让HotSpot的-XX:+PrintAssembly指令调用它来把动态生成的本地代码还原为汇编代码输出,同时还大量生
成大量非常有价值的注释。
二、JDK可视化工具
JConsole、与VisualVM
(一)JConsole
①启动JConsole:通过JDK/bin目录下的“jconsole.exe”启动后,将自动搜索出本机运行的所有虚拟机进程,不需要用
户自己再使用jps来查询了。
②“内存”页标签相当于可视化的jstat命令,用于监视受收集器管理的虚拟机内存(Java堆和永久代)的变化趋势。
③“线程”标签相当于可视化的jstack命令,遇到线程停顿时可以使用这个标签进行监控分析。
(三)VisualVM : 多合一故障处理工具
①VisualVM 兼容范围与插件安装
VisualVM基于NetBeans平台开发,因此它一开始就具备了插件扩展功能的特性,通过插件支持,VisualVM可以做
到:
显示虚拟机进程以及进程的配置、环境信息。
监视应用程序的CPU、GC、堆、方法区以及线程的信息。
dump以及分析堆转储快照。
方法级的程序性能分析,找出被调用最多、运行时间最长的方法。
离线程序快照:收集程序的运行时配置、线程dump、内存dump等信息建立一个快照,可以将快照发送开发者处进行
Bug反馈。
其他plugins的无限可能、、、
②使用教程:https://jingyan.baidu.com/article/e9fb46e172e3747521f76611.html
③BTrace动态日志跟踪
在开发中我们经常会遇到程序出现问题,但排查的话就不得不停掉服务,通过调试增量来加入日志代码以解决问题,当
遇到生产环境服务无法停止的时候,缺一两句日志导致排错进行不下去,是非常麻烦的一件事情。
所以就有了BTrace插件,这个插件的作用在于,可以在不停止目标程序运行的前提下,通过HotSpot虚拟机的
HotSwap技术动态加入原本并不存在的调试代码。

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

推荐阅读更多精彩内容