00:00
好在咱们讲完这个阿尔萨斯之后啊,咱们接下来呢,再给大家介绍一款工具叫做Java mission神control啊那么这样一款工具呢,咱们就不花那么大的篇幅呢去给大家讲解了,因为呢,我们在上述讲解过程当中,这个最主流的这些工具啊,其实都已经介绍过了,那为什么我们还要再去介绍一个叫Java民生controll呢?哎,这呢,我们说基于两个原因吧,第一个的话呢,就是毕竟哎Java民生CTRL呢,也属于Oracle官方啊这个发布的其中的一个工具。啊,像咱们在这个JDK啊,咱们找一下我这个自己安装的这个JDK啊,当然自己大大家呢也都有是吧?JDK呢,在这个B目录下呢,我们能够找到一个叫GMC的exe的可执行性的一个文件。啊,那这个GMC呢,其实就是我们这里要谈的这个Java密CTR啊,毕竟也是官方提供的一个,所以呢,我们多少呢也要提一下是吧?哎,这是其一啊,那其二的话呢,就是啊也有个别的一些人啊,他们认为呢,说这个GMC呢,这个用着呢,感觉比这个哎这个微VM啊,甚至呢,比这个je普呢,感觉功能还要强大是吧。
01:03
啊,实际上呢,关于这个观点呢,我还不敢苟同啊,啊,当然呢,我们不能说人家是错的啊,为什么呀。我们讲的这个工具啊,诶是不是都是为我们去这个发现这个程序的这个,比如说是内存泄漏也好啊,还是关于垃圾回收的这个一些相关的行为也好,它只是给我们提供一个发现问题和分析问题的一个,呃,一个数据上的一个展示,对吧?那么真正我们最终去解决这个问题,实际上呢,还要依赖于程序员本身的一个开发经验。啊,从这一点上来讲呢,其实跟医生是一样的,那我们讲的这些工具呢,其实就是类似于咱们做的,比如大家这个说这个心电图啊,B超啊,核磁啊,对吧?啊通过这样的一些工具呢,给我们展现了一些数据,那最终呢,这个病能不能看好,是什么病,是不是还是得依赖于医生本身的一个经验吧。对吧?哎,我们说这个经验呢,其实是比较重要的,那至于说呢,有的医生愿意就做B超,有的呢,可能做其他一些仪器啊,那就因人而异了,对吧?啊,他认为这个是比较强大的,这是有这种主观性的,这个我们没有必要去批判啊,啊当然这里边儿呢,我们也要把这个工具呢给介绍一下啊,那这块呢,我们来看一下,首先呢,是关于这个Java民生CTRL它的一个历史。
02:14
好,大家看啊说呢,在Oracle收购散公司之前啊,他先把这个j rocket给收购了,这个咱们以前都讲过啊,在这个j rocket里边呢,就有一款非常重要的工具啊,是虚拟的一个诊断工具,叫j rocket mission control,这个呢,恰巧简称是不是也叫做啊这个JMC啊,哎,只不过呢,这个J呢,是以前呢叫rocket的意思,现在呢,我们叫GMC呢,这个J呢是叫Java的意思了,是吧?哎,是这意思啊,那自然而然的话呢,Oracle呢,收购了g rocket,相当于就获取了这样的一个诊断工具了。啊,那后来的话呢,Oracle就把sun公司给收购了啊,收购了sun之后呢,相当于啊,Oracle呢,就具备了啊houseport和JCK的两款经典的市面上的一个虚拟机。对吧?啊,那么在后续当中呢,他就把这个G里边这应U特性啊,就给移植到了这个house上啊,包括咱们现在呢,看到的这个啊,比如这个VRCMD一下是吧。
03:08
哎,这块呢,咱们呃扎va呃杠上这个version,看到的其实还是这个叫houseport虚拟机是吧?诶是这意思啊,哎,但是事实上呢,现在houseport虚拟机里边的主体的研发团队呢,呃,其实应该是这个J绕K里边的啊,这样的一拨人啊。包括我们看到这个高斯林呢,其实已经从这个Oracle已经离职了,是吧,哎,相当于是已经,呃,脱离了这个house原有的这个主体了啊。好,那嗯,这个移植过来的一个重要特性呢,就是把这个像这个GMC这样的一个工具呢,给它移植进去了,嗯,那这里边呢,就提到了在JDK7UPDATE40这个版本之后的话呢,啊,这个密CTRL啊,就能够绑定在我们这个JDK当中了啊在这个版本之后呢,这个JDK里边大家呢,就跟我一样啊,能够找到这样的一个啊是不是这样的一个。哎,工具了是吧,哎,这是我们说的这个事儿啊。然后呢,从这个JDK10一开始呢,这个啊GF2,这个GF2呢,就是叫Java flight recorder啊,叫飞行记录仪,飞行记录器啊都可以,这个GF2呢,它属于我们Java mission ctrl中的一部分。
04:12
啊,属于一个整体和部分的一个关系啊,那这个Java呢,就已经开源了啊,就已经开源了,那么在这之前的一个Java版本当中,它还属于一个commercial的一个feature,就商业的一个特性啊呃,那么这个开源之后的话呢,我们在这个open jdk当中是不是就也能看得到了,对吧?大家如果想看源码的时候呢,也是可以这个查看的啊。呃,那我们要想使用在这个11之前是吧?诶我们想使用的话呢,需要解锁一下这个商业特性啊才可以像这呢,简单历史介绍啊了解一下,然后的话呢,就是我们如何去启动这个GMC啊这呢也提到了我们这个闭目录下的GMC了,这刚才我们不是就说到这个路径了,哎,大家把这个路径呢,直接打开之后双击哎这个可执行性的一个文件。啊,当然这块呢,是在Windows下的这样的一个是点exe结尾的对吧?好,那接下来的话呢,我们就看到启动的这样的一个界面了啊启动这样一个界面啊,那这块呢,能够显示的就是我们能够监控到的呃,相关的一些Java进程啊,相关的些Java进程,好那这里边的话呢,我们是不是可以把咱们呃Java的一个程序给启动起来是吧?好,我们演示这个阿尔萨斯的时候呢,有一个OM test把它呢run起来。
05:18
好了,哎,这块呢就启动了,哎,然后回过来,哎,在这儿呢,大家就能看到哎实时的监控了,我们现在有一个OM test这样的一个进程是吧?啊这个进程大家打开之后呢,诶是不是就有两个主要的选项啊,叫MB啊,还有这个叫飞龙飞行这个记录器啊,飞行记录仪啊都可以啊,那如果大家呢,你首次打开的时候呢,我们会看到呢,有这样的一个这个界面说明是吧?啊GMX的一个控制台啊,飞行记录器啊,这是插件了啊,我们主要关注的其实就是前面这两项。啊,就前面两项啊。好,那首先呢,关于这个GMC的话呢,我们做一个概述。它呢是官方提供的一个性能强劲的一个啊分析工具啊,用于Java应用程序的哎,管理监视概要分析和故障排除啊等等啊,它有个客户端啊,刚才我们这块启动的,这不就有个客户端嘛,对吧。
06:08
嗯,然后呢,呃,就是提到了我们这个MXB啊这样的一个这个工具。哎,提到这样的一个工具啊,还有内置的这个诶Fla的recorder啊呃GMC的另外一个优点,诶这块大家关注一下啊,诶这个哥们呢,就非常轻巧啊,它在取样的时候呢,不是传统的代码植入的方式啊,所以呢,它对我们这个呃整个应用程序性能的影响呢,是非常非常小啊,我用了两个非常是吧,那前面呢,咱们讲这个接发的时候呢,是不是提到了它这个数据采集方式是吧?呃,像这个重复方式呢,它是不是就会涉及到将诶这个class加载的文件当中去植入我们相应的这个测试的代码,所以它会对这个呃整个程序的运行呢,会有产生比较大的一个影响。是吧,还产生比较大的一个影响啊,而我们这个GMC的话呢,它是非常非常的轻量级的啊,它的影响很小啊,乃至时候呢,我们在做压测的时候呢,大家都可以开着这个GMC。
07:02
啊,可见率影响呢很小啊,然后下边呢,就是对这个,呃,这个GMC里边我们提到的一个啊,首先是MB啊服务器这样的一个功能的一个说明啊,这块呢,大家你就双击一下就可以了是吧。好,那这块呢,我们就呃不看这了啊,就这块儿提到一个远程的话呢,你需要设置相关的这样的一些参数啊,这块咱们就不提了啊。好,那这块呢,我们回过来现在呢,就能够展示啊,咱们当前这样的一个信息。哎,当年这样的信息的展示,呃。挺有意思的,就是大家你看那个面板啊,这这三个框是不是感觉就像这个飞机的那个仪表盘一样是吧?啊记录了当前咱们这个Java这个堆的一个memory啊,对这个memory大小啊,GM一个CPU的一个使用率是吧,还有这个life set,还有fragmentation啊这样的一些数据啊,这个咱们目前没有这个值。呃,在这块呢,大家也可以去添加你感兴趣的一些这个数据啊,以仪表盘的方式呢呈现啊,比如说。
08:03
比如说我们看一下这个memory这块啊,这个空闲的keep memory啊,这是使用的空闲的,那选一下吧,来我们点一下这个完成。好,这里边儿呢,就能够展示出来,咱们现在呢,是不是空闲的这个memory这个大小是吧,哎,这算是使用的啊,这算是空闲的啊,那你要想感兴趣的话呢,你看其他的这些呢,都可以选。啊都可以选这个根据大家自己的这个需要,需要就可以了啊available processor啊完成一下啊,这也可以过来是吧,行。嗯,这是我们说的它,然后呢,我们看看下边呢,就是涉及到这个处理器啊,它的一个百分比的占用情况啊,GVM的一个CPU的使用,还有这个机器的CPU的一个使用,OK,然后内存的一个使用啊,比如说现在呢,显示的是我们使用了的Java的内存啊,这块呢,120多兆是吧。那最大的一个堆内存,我们把这个勾一下。
09:00
勾上了啊,那最大的堆内存是在这儿呢啊,因为我们这块呢,设置过这个,呃,最大这个堆内存的一个大小是吧?哎,设置过这个数据啊,嗯,还有呢,比如我们这个可以获取到啊,提交的这个Java的这个对大小,比如这个我们选一下看看。哎,这个数据呢,勾上以后呢,诶没没出来是吧。勾上,勾上。好像没有显示是吧。哎,使用的这个物理的这个内存,来把这个勾一下看看。哦,这个勾完之后呢,一下子,因为我的电脑是32G的内存啊,那下边这个数据呢,就不明显了,把它去了吧。有点卡顿啊,有点卡顿。他去了。哎,呃,这这两条线出来了是吧?哎,然后把这个呢,你也可以给它勾选上,好这两个线重合了是吧?哎,这样啊好这个呢,是咱们说的这样一个情况,呃,然后呢,我们看下边这块啊,还有其他的一些选项,比如说呢,像呃这个就这个没啥说的了啊就过了,呃下边你看这有个叫触发器啊trigger嗯,触发器是什么意思啊。
10:10
哎,触发器嘛,顾名思义是吧,哎,比如我们这里边可以设置这个CPU的这个占用率啊,比如说这个占用率比如过低的时候啊,哎,过高的时候啊,或者我们这个设置相应这个线程过高的时候,哎,我们是可以让相关的这个触发器呢,做一个触发报警的啊,这个涉及到这个触发器的一个情况啊呃,系统这块就过了啊,就是一些基本的一些信息展示是吧?呃还有这块呢,是不是一个内存情况呀?呃,内存这块能够提供我们关于这个,呃,内存的一个使用情况啊,这个老年代啊,伊甸园区啊,Code catch啊是吧?诶survival区啊,诶你看它的一个使用率啊,使用率的一个情况,包括呢,我们这个GC的一个说明。啊,这个呃,并行的垃圾回收器啊,这呢是我们这个这个相应的啊,新生代啊,老年代啊等等,我们这块呢,相当于使用垃圾回收器的它的一个数据的一个展示啊,这是关于这个内存的一个情况,哎,线程这块呢是呃,这个能够显示咱们当前这个程序在执行过程当中,呃,需要用到这些线程,以及他们各自的这个状态啊,阻塞的一个技术啊等等等等等是吧?哎,那我们在其他的这个工具当中,多少也看到过类似的这样一些数据的展示。
11:16
啊,那这些呢,都是呃为我们去分析这个程序的性能呢,起到一定的帮助作用的,最终这个呃结论呢是什么?其实还是呃大家呢,各位啊,就相当医生一样啊,基于这些数据,你自己呢来去判断啊,去分析啊,这些工具呢都是为己所用的啊,不要被工具所累,对吧?啊是这样的啊那这儿呢,我们就先简单介绍一下刚才提到的这样的第一个功能啊,在这叫m in啊服务器,然后呢,我们再来看一下,这叫诶飞行记录器啊。
我来说两句