虚拟机性能监控与故障处理工具之可视化工具.ppt

虚拟机性能监控与故障处理工具之可视化工具.ppt

ID:51999282

大小:1.30 MB

页数:49页

时间:2020-03-27

虚拟机性能监控与故障处理工具之可视化工具.ppt_第1页
虚拟机性能监控与故障处理工具之可视化工具.ppt_第2页
虚拟机性能监控与故障处理工具之可视化工具.ppt_第3页
虚拟机性能监控与故障处理工具之可视化工具.ppt_第4页
虚拟机性能监控与故障处理工具之可视化工具.ppt_第5页
资源描述:

《虚拟机性能监控与故障处理工具之可视化工具.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第6讲-虚拟机性能监控与故障处理工具 之可视化工具软件工程系潘正军主要内容大纲JConsole:Java监视与管理控制台VisualVM:多合一故障处理工具本节内容引入JDK中除了提供大量的命令行工具外,还有两个功能强大的可视化工具:JConsole和VisualVM,这两个工具是JDK的正式成员,没有被贴上“unsupportedandexperimental”的标签。其中JConsole是在JDK1.5时期就已经提供的虚拟机监控工具,而VisualVM在JDK1.6Update7中才首次发布,现在已经成为Sun(Oracle)主力推动的多合一故

2、障处理工具,并且已经从JDK中分离出来成为可以独立发展的开源项目。为了避免本节的讲解成为对软件说明文档的简单翻译,准备了一些代码样例,都是特意编写的“反面教材”。后面将会使用这两款工具去监控、分析这几段代码存在的问题,算是本节简单的实战分析。读者可以把在可视化工具观察到的数据、现象,与前面两章中讲解的理论知识互相印证。一、JConsole:Java监视与管理控制台JConsole(JavaMonitoringandManagementConsole)是一种基于JMX的可视化监视、管理工具。它管理部分的功能是针对JMXMBean进行管理,由于MBea

3、n可以使用代码、中间件服务器的管理控制台或者所有符合JMX规范的软件进行访问,所以本节将会着重介绍JConsole监视部分的功能。1.JConsole:启动JConsole1.启动JConsole通过JDK/bin目录下的“jconsole.exe”启动JConsole后,将自动搜索出本机运行的所有虚拟机进程,不需要用户自己再使用jps来查询了,如图所示。双击选择其中一个进程即可开始监控,也可以使用下面的“远程进程”功能来连接远程服务器,对远程虚拟机进行监控。1.JConsole:启动JConsole从前面的图可以看出,笔者的机器现在运行了Ecli

4、pse和JConsole。双击它进入JConsole主界面,可以看到主界面里共包括“概述”、“内存”、“线程”、“类”、“VM摘要”、“MBean”6个页签,如下图所示。2.JConsole:内存监控内存监控“内存”页签相当于可视化的jstat命令,用于监视受收集器管理的虚拟机内存(Java堆和永久代)的变化趋势。我们通过运行代码清单4-8中的代码来体验一下它的监视功能。运行时设置的虚拟机参数为:-Xms100m-Xmx100m-XX:+UseSerialGC,这段代码的作用是以64KB/50毫秒的速度往Java堆中填充数据,一共填充1000次,使

5、用JConsole的“内存”页签进行监视,观察曲线和柱状指示图的变化。3.JConsole:案例演示源码3.JConsole:案例演示源码3.JConsole:案例运行可视化结果3.JConsole:案例运行控制台结果3.JConsole:案例运行结果分析程序运行后,在“内存”页签中可以看到内存池Eden区的运行趋势呈现折线状,如上图所示。而监视范围扩大至整个堆后,会发现曲线是一条向上增长的平滑曲线。并且从柱状图可以看出,在1000次循环执行结束,运行了System.gc()后,虽然整个新生代Eden和Survivor区都基本被清空了,但是代表老年

6、代的柱状图仍然保持峰值状态,说明被填充进堆中的数据在System.gc()方法执行之后仍然存活。笔者的分析到此为止,现提两个小问题供读者思考一下,答案稍后给出。1)虚拟机启动参数只限制了Java堆为100MB,没有指定-Xmn参数,能否从监控图中估计出新生代有多大?2)为何执行了System.gc()之后,上图可视化结果中代表老年代的柱状图仍然显示峰值状态,代码需要如何调整才能让System.gc()回收掉填充到堆中的对象?3.JConsole:案例问题答案问题1答案:上图可视化结果显示Eden空间为27328KB,因为没有设置-XX:Surviv

7、orRadio参数,所以Eden与Survivor空间比例为默认值8:1,整个新生代空间大约为27328KB×125%=34160KB。问题2答案:执行完System.gc()之后,空间未能回收是因为List<OOMObject>list对象仍然存活,fillHeap()方法仍然没有退出,因此list对象在System.gc()执行时仍然处于作用域之内。如果把System.gc()移动到fillHeap()方法外调用就可以回收掉全部内存。4.JConsole:线程监控如果上面的“内存”页签相当于可视化的jstat命令的话,“线程”页签的功能相当于可

8、视化的jstack命令,遇到线程停顿时可以使用这个页签进行监控分析。前面讲解jstack命令的时候提到过线程长时间停顿的主

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。