java应用监测(5)-可视化监测工具

tags: java, troubleshooting, monitor,jvisualvm,jconsole


一句话概括:jdk本身自带的监控工具jconsole和jvisualvm可以更方便,更直观地对java应用进行性能监测,下文为你讲解如何使用它们。

1 引言

前面几篇文章(见下文“相关阅读”)已经对jdk的命令行工具进行了介绍,但它们使用起来相对还是不够直观,而且一般都需要在本机上使用,有没有更方便,更直观的方式来对java应用进行监测?其实,jdk本身已经提供了java监测的GUI工具,分别是jconsolejvisualvm,下面对这两款工具的功能及使用进行描述。

2 jconsole使用

jconsole是jdk一个内置Java性能分析器,在JDK安装目录下的bin目录,在windows下,可以从命令行(jconsole.exe)或直接双击jconsole.exe启动运行。读者有兴趣可以参考jconsole工具的官方使用文档https://docs.oracle.com/javase/8/docs/technotes/guides/management/jconsole.html

2.1 两种连接方式

jconsole启动时,会提供两种连接方式,分别是连接本地进程和连接远程进程。它会直接列出本地java进程来选择。若是需要监测远程的java进程,则勾选远程进程,然后输入<hostname>:<port>。这需要远程的java进程启动时,设置JMX的远程连接参数,否则是无法连接的,关于远程连接的JMX技术,可以参考官方文章https://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html)参数分别是以下几个:

# 需要监控的服务器IP
-Djava.rmi.server.hostname=192.168.222.10

# 提供监控的java进程端口
-Dcom.sun.management.jmxremote.port=9004 

# 指定后续的通讯端口,与上面一致
-Dcom.sun.management.jmxremote.rmi.port=9004 

# 不使用ssl登录,若有安全需求,可设置
-Dcom.sun.management.jmxremote.ssl=false 

# 不验证,若有安全需求,可设置
-Dcom.sun.management.jmxremote.authenticate=false 

如下图所示:

image

注意,由于不使用ssl,会提示"不安全连接",点击它即可。

2.2 jconsole功能使用

启动并连接java进程后,jconsole的界面是比较简洁的,分为6个模块:

  • 概述:对java进程的总体概览,包括堆,线程数,类,CPU占用率的变化折线图。
  • 内存:显示堆及非堆的内存使用信息,类似jmap和jstat
  • 线程:显示线程使用信息,类似jstack
  • 类:显示类装载信息
  • VM摘要:显示JVM信息,类似jinfo
  • MBeans:显示MBeans信息(用得比较少)

2.2.1 概览

概览主要显示堆,线程数,类,CPU占用率的变化折线图,基本上可以直接根据折线图来查看应用概况。如果堆占用内存很高,活动线程数很多,CPU占用率很高,那就可以直接进入到相应的区域看详细内容来查找原因了。另外,右击对应的图,可以把数据导出到csv文件来分析。如图:

image

2.2.2 内存

内存是我们监测的重点区域,可以参看堆内存,非堆内存,内存池的状况,GC次数和时间,可以手动进行GC查看内存变化。如下图:

image

其中,图的上方可以选择查看哪个内存的变化(堆、非堆,old区,eden区,survivor区,metaspace区等),也可以手动执行GC查看变化情况。图下方有显示内存的大小及使用大小,GC的次数和使用时间,同时以柱状图的方式来显示堆和非堆的变化。因此,对于有内存溢出,OOM这些问题,看这里的监测数据非常适合。

2.2.3 线程

线上应用,线程长时间停顿的主要原因主要有:等待外部资源(数据库连接、网络资源、设备资
源等)、死循环、锁等待(活锁和死锁),这些都需要监测java应用的线程运行状况,如下图:

image

线程数变化情况及点击某个线程查看运行状态来分析,其中还可以点击“检测死锁”功能来处理死锁问题。

2.2.4 类

此功能主要用于查看加载的类总数,如果加载的类一直在增加,就得查看代码是否有不断产生类的代码了。如下图:

image

2.2.5 VM概要

当我们对java应用添加了启动参数( JAVA_OPTS),若想在线上查看此应用的实际使用情况,参数是否生效,命令行工具我们是用jinfo,现在在这里可以直接看到,而且包括了系统信息,类信息,堆信息及相关的VM参数。如下图:

image

3 jvisualvm使用

jconsole类似,jdk在bin目录下还提供了jvisualvm工具,相对来说,jvisualvm更为强大,在windows下,可以从命令行(jvisualvm.exe)或直接双击jvisualvm.exe启动运行。读者有兴趣可以参考jvisualvm工具的官方使用文档https://docs.oracle.com/javase/8/docs/technotes/guides/visualvm/index.html

3.1 两种连接方式

jconsole一样,jvisualvm可以监测本地的java进程,也可以监测远程的java进程。本地进程直接选择即可,远程进程同样需要java进程添加JMX启动参数。

3.2 jvisualvm功能使用

jvisualvm的功能比较强大,主要包括以下几项功能:

  • 显示虚拟机进程以及进程的配置、环境信息(jps、jinfo)。
  • 监视应用程序的CPU、GC、堆、方法区(1.7及以前)、元空间(JDK1.8及以后)以及线程的信息,相当于jmap,jstat,jstack。
  • dump以及分析堆转储快照(jmap,jhat)。
  • 方法级的程序运行性能分析,找出被调用最多、运行时间最长的方法。
  • 离线程序快照:收集程序的运行时配置、线程dump、内存dump等信息建立一个快照

界面上的功能主要分为几大模块,分别是概述、监视、线程、抽样器。

3.2.1 概述

概述相当是java命令行工具中的jpsjinfo,可以显示进程以及进程的配置、系统属性,启动参数等,与jconsole的"VM概要"差不多。如下图:

image

3.2.2 监视

此功能相当于jconsole的"概览"功能,同样是以图形化的方式,显示CPU、堆变化、线程数变化及加载类情况,但它有一个功能是可以远程dump出堆转储快照(相当于jmap -dump:file=./heap.hprof PID),dump时会选择文件存储位置。

image

dump出的堆快照,我们可以手动把文件下载下来,然后使用它的“装入快照”功能加载到jvisualvm(装入时需要选择文件类型是以"hprof"类型),进一步分析堆的内存情况。装入后,会包含概要信息,类和实例占用内存情况,双击类还可以看到具体的实例数,若是发现某些类的实例数很多,或者占用的内存大小比较高,则可以知道问题所在。如下所示:

image

3.2.3 线程

此此功能相当于jconsole的"线程"功能,但更丰富,它把每个线程的运行状态,运行时间都以图形化的方式显示,同时还可以进行远程线程dump,这个功能,其实就是jstack -l功能,dump出来后,直接显示到界面中。如下:

image

3.2.4 抽样器

抽样器是jvisualvm的独有功能,可以对CPU和内存进行抽样显示,每隔一段时间把内存信息,线程信息,可以很方便的集中精力分析某一段时间的数据变化(可以以层级方式显示细到方法的执行时间,类占用内存情况等),同时也提供执行GC、内存dump及线程dump功能。如下:

image

4 总结

有了jconsolejvisualvm两款可视化工具,可以减少命令行的输入,以更方便,更直观的方式来监测java应用的内存、线程、CPU等信息,是处理java线上问题的好帮手。不过要注意一点的是,使用这两款工具之前,我们还是需要对JVM,Java程序运行机制,线程等知识有一定的积累。希望本文对大家有帮助。

参数资料

相关阅读

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

推荐阅读更多精彩内容