jvisualvm功能演示

jvisualvm功能演示1 启动在命令行输入 jvisualvm 如果 jdk 安装正确的话 6 x 以上版本 就会看到如下的一个窗口 看起来相当简洁 不像是很强大的样子 2 运行一个 Java 程序 IncTestN jvisualvm 会自动找到它 3 右键点击它 打开 可以看到它有很多标签页 可以让我们监测程序的各种数据 默认没有这么多 我其实安装了一些 jvisualvm 的插件 4 查看 j

1。启动

在命令行输入jvisualvm。如果jdk安装正确的话(6.x以上版本),就会看到如下的一个窗口:

jvisualvm功能演示

看起来相当简洁,不像是很强大的样子。

2。运行一个Java程序IncTestN,jvisualvm会自动找到它

jvisualvm功能演示

3.右键点击它,”打开”

jvisualvm功能演示

可以看到它有很多标签页,可以让我们监测程序的各种数据。默认没有这么多,我其实安装了一些jvisualvm的插件。

4。查看jvm参数及系统属性

jvisualvm功能演示

5。查看cpu、内存、类、线程的统计数据

jvisualvm功能演示

注意,右边第一个还可以查看PermGen。对于scala程序,因为它产生了大量的类定义,所以PermGen有可能会不足,可通过该选项查看PermGen,适当调整:

jvisualvm功能演示

可以看到,对于本程序来说,PermGen还是比较充分的,无须调整。

6。查看各线程运行情况

这个是重点,我们需要知道各线程的运行情况,特别是否被synchronized阻塞了。

jvisualvm功能演示

注意右下角,有四个状态说明,分别是:

  1. 运行(Running):我们最喜欢的状态。说明该线程正在执行代码,没有问题。
  2. 休眠(Sleeping):调用了Thread.sleep后的状态,说明线程正停在某个Thread.sleep处
  3. 等待(Wait):手动调用了wait方法,或者某些IO操作,在阻塞中等待数据。
  4. 监视(Monitor):这里就是我想找的问题了。它表示线程想执行一段synchronized中的代码,但是发现已经有其它线程正在执行,自己被block了,只能无奈地等待。如果这种状态多,说明程序需要好好优化。

从上面的这个图可以看到,下面多个线程都处于”监视”状态。多个线程都卡在了独木桥的一头过不去,干不了活干着急呢。

当然这个程序是我专门设计成这样的,存在着严重的性能问题,需要好好优化。

7。查看各线程的统计数据

如果我们需要一些统计数据,比如某个线程总共运行了多少时间,”运行”状态有多久(或百分比),休眠、等待、监视有多久,则需要用到”表”这一页。

jvisualvm功能演示

从中可以看到这个悲催的程序,几分所有的时间都用在了synchronized的阻塞上了。只有百分之零点几的时间在运行中,效率可真低啊。

还可以使用图表方式来看这些数据,得到更直观的体验:

jvisualvm功能演示

8。查看各方法的运行时间

想不想程序中到底是哪些方法一直在运行?可使用”抽样器”功能:

jvisualvm功能演示

我们需要先点击上面的”CPU”按钮,它才会开始统计,下面的数据会慢慢多起来。从上图可以看出,程序一直在运行SynIncer.inc()方法,它占用了所有方法执行总时间的99.8%。如果我们想提高程序性能,则需要重点优化它,让它运行得更快。

还想知道方法被调用的次数?使用”Profiler”页中的功能:

jvisualvm功能演示

它与抽样器很像,但是最后多了一个”调用次数”。

9。查看哪些对象占用了最多的内存

当出现了内存不足的错误时,想不想知道到底是哪些对象把内存都占用了?这时需要使用”抽样器”的”内存”检测功能:

jvisualvm功能演示

从表中可以看出当前最多的是哪些对象,它们有多少个,用了多少个字节。

10。安装更多插件

jvisualvm还在线提供了很多插件,提供了更多的功能。我们可以通过”工具”->”插件”,找到并安装它们。推荐全装,比如我就安装了全部(当前有16个):

jvisualvm功能演示

安装重启后,再找到某个程序节点,就会发现有更多的标签页可用。

11。查看MBeans

MBeans可以将程序中的某些信息暴露给外部。有一些库在设计时,就考虑到了这一点。如果我们不满足于前面那些基础信息,可以在这里看看。

jvisualvm功能演示

由于当前程序没有使用到提供MBeans信息的库,所以看不到什么多少有用的信息。如果你使用了某些数据库连接池(提供了MBeans功能的),可以在这里看到池里的一些信息,还可以通过”Operations”标签页,对程序数据进行一些修改。

12。查看gc情况

垃圾回收是我们不能忽略的一个地方。我们可以通过”Visual GC”页,查看到非常详细的垃圾回收情况。

jvisualvm功能演示

可以说,这个功能提供的信息真是非常地详尽,连两个小Eden的情况也实时地表现出来了。不过要看懂这些数据,还是需要先到网上看看讲解Java垃圾回收的文章,了解其内部原理才行。

13。更多更详细的监测内容

Tracer页提供了更多的监测内容

jvisualvm功能演示

可以看到程序中遍布探针,让我们实时了解到各处的运行情况。先选中感兴趣的内容,然后点击”Start”按钮即可。

jvisualvm功能演示

这一块比较专业,普通开发人员可能都不知道这些数据到底有什么用。但专业人士可能会觉得会很需要它们。

JvisualVM的大部分功能都已经演示完了,我想它的功能的确很强大,在我们平时的开发中会非常有用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231603.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【撸网站第一天】开篇

    【撸网站第一天】开篇今天准备撸一个网站,主要撸一下他的技术点,包括:前端、结构、后端、压力测试等等。现介绍一下这个网站:http://xingship.com测试下来,这个网站貌似只能在手机上使用,我在pc上显示的效果并不是很好,不知道站长是否可以兼容一下pc端。如下效果:很丑,但是当我跑到手机上来看的时候,还像那么回事。网站呢,主要是电影短视频的介绍。开始我以为这个是网站的布局是这一个标准的网格布局,但是其实他是个瀑布模式。第二篇,我们来详细介绍这个,好啦,今天由于时间关系,就现记录到这..

    2022年8月31日
    3
  • 江门python培训机构

    江门python培训机构猿辅导接近完成新一轮融资:腾讯领投,估值75亿美元据路透社报道,知情人士称,在线教育平台猿辅导接近完成新一轮融资,估值约为75亿美元。本轮融资由腾讯控股公司和私募股权公司高瓴资本领投。对此,猿辅导向多知网表示“消息不准确”,暂未进一步说明。腾讯和高瓴资本均暂未对融资消息置评。教育部、财政部:实施教师在线教学能力提升行动教育部、财政部印发《关于做好2020年中小学幼儿园教师国家级培训计划组织实施工作的通知》。通知提出,实施教师在线教学能力提升行动,已经或计划开展在线教学的省(区、市),要通过线上培

    2022年6月9日
    47
  • keyvaluepair_【转】KeyValuePair用法「建议收藏」

    keyvaluepair_【转】KeyValuePair用法「建议收藏」KeyValuePair用法(转)C#KeyValuePair的用法。结构体,定义可设置或检索的键/值对。也就是说我们可以通过它记录一个键/值对这样的值。比如我们想定义一个ID(int类型)和Name(string类型)这样的键/值对,那么可以这样使用。//////设置键/值对//////privateKeyValuePairSetKeyValuePair(){intintKey…

    2022年7月26日
    6
  • Docker Compose搭建mycat读写分离

    Docker Compose搭建mycat读写分离接上篇docker-compose部署mysql主从复制,本文介绍如何搭建mycat中间件,并用mycat来做读写分离.配置文件以及文档地址:mycat-rw系统环境docker1.12.3mysql5.7.17deepin15.3桌面版(这个没啥影响,因为我们用docker)mycat1.6要点说明看上篇文章的详细介绍暴露mysqlmycat端口号,方便管理本文直接从dock

    2022年10月10日
    2
  • HTTP 请求 报错信息406「建议收藏」

    背景:和APP(安卓)联调时,APP请求获取数据时提示406错误解决过程:在网上寻找资料(以前没遇到过),一一排除,最终解决(浪费蛮多时间所以记录下来,等待有缘人)。星空的阿斯的这篇博客https://blog.csdn.net/xingkongdeasi/article/details/799…

    2022年4月11日
    77

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号