00:00
那接着呀,咱们看第二个命令行的这个工具,叫做j state,查看GVM的统计信息啊,当然这个词的话呢,大家最好记一下啊,最好记一下啊,那其实也不用死记硬背哈,为啥呢?那因为呢,咱们接下来呢要演示,那演示完以后呢,其实大家也在练习之后呢,你自然而然的其实也就记住它的这个主要作用了啊,那首先说一下这个G,它也是几个单词的缩写,叫做GM statistics啊,这是统计的意思啊,Monitoring就是监视监控的意思啊,Tool工具就是统计的监控工具啊,关于GM的啊,所以呢,它主要呢,就是用来去监控我们GM的相关运行状态的一些数据信息。啊,是这样子的,涉及到哪些呢?啊,比如说它可以显示本地的或者是远程虚拟机进程当中的像类加载啊,内存呢,垃圾收集,J编译啊等等相关的这个数据。啊,应该说呢,这个j state呢,它的这个呃,功能呢是十分强大的啊,可以查看咱们这个堆的一些详细的这个统计信息啊,那这里边儿呢,提到这个本地和远程的问题,那远程呢,其实也是跟咱们上边GPS呢是一样的,我们只要呢提供这个远程的一个IP地址和进程的这个ID啊,我们就可以访问远程了,那这儿呢,咱们统一的包括下边这些指令主体上都是来演示本地的啊,这个大家注意一下,呃,下边呢,提到了关于它能够监控哪些行为,这个大家呢也不用死记硬背,因为咱们下边具体的这个语法规则当中,关于这个option这块,大家一看参数啊,你就都知道了,诶其实就是关于这些情况的。
01:34
行,那接着往下看说呢,在没有GUI图形界面啊,只提供了纯文本控制台环境的这个服务器上呀,它将是运行期定位虚拟机性能问题的首选工具。这个应该很好理解吧,啊就是我们在服务器上呢,如果大家通过指令去查看这个虚拟机相关的统计信息的时候,比如说内存的占用啊,啊涉及到我们新生代老年代是吧,内存的占用包括这个样jc fourc,它的这个触发的次数等等,像这些数据的话呢,我们就可以通过这个叫g state呢,进行一个命令行的一个编写,去进行一个查看了,啊主要呢,是用于这个检测垃圾回收的问题和内存泄露的问题啊这呢也是我们即使图形化界面,那也是主要关注的两个问题,对吧。
02:20
那下边呢,是对应的有一个官方的文档,就是对我们这个J呢进行了一个介绍,这个大家呢,有兴趣的话,你就把它呢点开是吧,然后查看一下官方给我们提供的这样一个文档就可以了。啊,当然了,因为有我们现在这个讲解了啊,这个大家呢,就可以不用刻意刻意的去看这个文档了啊,因为之前呢,我都已经看过了啊这呢,我们就把这个核心的内容呢给大家呢摘出来,行,那下边呢,咱们就看一下这的基本语法。咱们直接呢,在这个命令行这块啊,我去输入这个叫接state。啊,我直接输入这个j state,这呢其实就能够直接看到我们这个j state它的一个基本使用啊,或者你输入这个叫j state后边加一个杠help啊其实一样的是吧,诶出来这个情况一样,这呢就列举出来了我们这个J它的使用的一个比较长的这样的一个参数的情况,哎,我这呢也把它呢罗列到咱们的这个课件里边了,因为这里边这个参数啊叭较多,所以呢我就把它盯一下啊,方便大家呢来看啊,哎,方便大家来看。
03:21
在这个参数里边啊,我们说呃,最重要的呢,大家应该也能猜出来,就是这个option,因为我们在很多的这个参数,这个这个命令行的工具里边都会有这个option的啊,这个option呢是最重要的,当然呢,它也是最复杂的啊,因为涉及到的这个参数的情况呢比较多,所以呢,这个呃命令行工具怎么讲呢?嗯,我准备这样啊,给大家讲清楚。呃,这里呢,咱们先拿其中的一个option呢来说,那不妨呢,我就用这个点,呃这个杠class了,呃先用它呢,来去这个填充到我们这个option这块,后边这几个参数呢,咱们先给大家讲清楚。啊,后边这几个参数我先给大家讲清楚,然后呢,咱们翻回来再重点的看一看,这个option呢,都具体的有哪些行为。
04:08
能理解吧,哎,先得清楚我这块怎么讲的啊,哎,跟着我这个思路下去,行,那这块呢,咱们先接呢,以其中某一个option为例,那这个呢,咱们就不妨用这个叫杠class,一会咱们再详细的说这个option呢有哪些,这个杠class呢,它是来显示class loader的相关信息,有类的装载啊,卸载的数量,装载的数量,卸载数量,总空间啊,这个装载或者卸载你的耗时。等等,哎这样的一个情况,那当然了,它也是针对具体的某一个是不是进程啊,哎,我们这个v m midd就是虚拟机的进程ID号啊,这个能理解就OK了,行,那下边呢,我们针对某一个程序呢,来执行一下啊这呢其实也是咱们这个执行这个GPS的时候呢,这样的一个程序啊,就还是这个scanner啊非常简单,好,那这呢,我们就把这个程序呢给它跑起来。那因为它正好是一个阻塞式的这个技能呢,它不会结束是吧,那我们就让它开着啊,他开着的时候呢,我们回到这个,哎,命令行这块,咱们先来一个GPS。
05:09
查看一下当前的scanner test是9000啊,挺好记得啊,然后呢接state。接对吧,然后后边呢,大家去输入这个叫杠拉,嗯,然后呢,指出我们这个进程ID是9000好一回车,这呢是我们比较简单的一个这个指令了,哎,我们这里边呢,只包含了这个杠class,这个option啊,还有这个ID啊,其他的这个四个字段我们现在都没有行,那简单的通过它呢,来了解一下我们这个杠class,它这块呢,能显示的就是我们这个程序在运行的时候啊,涉及到加载的这个类的个数,那那加载这个类呢,它所占用的这个字节数,对吧?卸载的类的个数,卸载的类啊,它所占用的字节数,以及呢,花费的总体时间。啊,总体时间啊,这个比较清晰对吧?好这呢,就是我们说的这个类装载的功能,其实在我们刚才说这个基本情况的时候呢,是不是就提到他了。
06:02
哎,就是类装载这个功能,就是通过我们这个杠class这样一个参数呢来体现的,行,那这个完了以后,那下边呢,我们来讲其他这几个参数先呢,给大家来说一下后边这两个参数。先说后边这两个,后边这两个的话呢,一个呢叫interval,一个呢叫count,来先来看一下这个interval。Interval的话呢,它的意思就是说用于指定输出统计数据的周期,单位为毫秒及这个查询的间隔,就是你想每隔多长时间呢打印一次。那那大家能看到默认的时候呢,如果没有指定这个interval,是不是它就只打印一次啊好,那现在呢,我们去指定一下,比如说我这里边输入一个1000,那单位是毫秒,那就是每隔1000毫秒,也就是一秒呢,打印一次好回车。大家看这时候呢,是不是就每隔一秒钟打印一条这个数据啊。诶,它就是便于我们进行一个持续的监控,那就像我们这个内存这个程序,比如说跑起来之后呢,我们内存这块是不是都有一个变化情况,我们就便于诶通过这样一个参数来进行连续情况的一个监控啊这样子的,那这个监控什么时候终止呢?啊,因为我们现在呢,是不是只指定了这个引头,我没有指定count,那就意味着你这时候可以看成是一个无穷的啊嗯,直到你这个程序呢,就是结束了,那我们这个呢,就不再打印了,或者你出现这个这个这个叫什么内存溢出了是吧?啊,它就结束了,因为这个程序咱们是个阻测试的,所以它就会一直打我这块,直接CTRLC一下啊,终止它了。
07:31
好,这个呢,咱们就说清楚了,这个叫inter,就每隔多长时间打印一次,然后在这个基础之上呢,我后边再来一个,比如说十。啊,带来了一个十,这个十呢,对应的就是我们这个count说用于指定查询的总次数,我这呢就相当于查十次,好回车一下。哎,回撤一下,这时候呢,大家你会发现我们这个程序呢,再去执行,它有一个执行的上限啊,每隔一秒钟打印一次,一共打印十次。
08:01
好数一下啊,一二三四五六七八九十没问题对吧?哎,打印十次行,这个呢,就是我们说的这样的一个情况啊,嗯,这里边儿呢,要注意的就是我们这个interval跟count不写的时候呢,默认呢只查询一次,那如果你只写一个参数的话呢,它就会认为你是这个interval。那你写俩的话呢,第二个就是count行,这两个呢,咱们就说清楚了,然后接着的话呢,来说一下,这个叫杠T。啊,先说这个杠T需要注意的一点,但你看清楚这个杠T呢,出现在咱们的进程ID的是不是前面啊,在我们这个option的是不是后面啊,啊没有问题,好,下面呢,我们来加一下啊。加一下话呢,加一下的话呢,我们是在这个位置啊,我先把前面这几个参数,比如说先删一下吧。在这啊,我们写一个嗯,杠T。好来,然后呢,我回车一下。可以了,加上这个杠G之后呢,大家会发现在我们刚才输出的这个class这个信息之前,这有一个呢,叫time step。
09:06
这个time step呢,它显示的就是咱们程序呢,呃,从刚开始咱们去执行起来,它到现在它花费的这个一共执行了多长时间,在238.4秒啊,注意是秒啊,那你看我们再执行一下。数据多一点啊,多了这个将近这个30秒,这个情况是吧?哎,这呢是它程序从开始执行到现在一共经历了多少秒啊,就是相当于程序执行的总时间啊,说的直白一点。嗯,OK啦,然后呢,你看我们在这个基础之上,如果我们再写一个,比如说1000,然后再整一个十啊回车一下。啊,那这时候大家会发现是不是每隔这个一秒钟,相当于是打印一下是吧?哎,这样啊,这里边打印呢,相当于也会要花那么一点点的这个时间,所以你会看到稍微有一点偏差是吧?哎,这样的情况啊。那这个呢,我还得。因为我这个刚才一按这个这个这个这个控制台的话呢,它就相当于失去焦点了啊行,你看这呢,一共是打印了这十次啊,就相当于是每隔这个一秒钟的这个情况呢,去打印一下啊这个呢就是嗯,我们这多一个这个杠T,它能记录程序执行的总时间,然后呢来看这个叫杠H。
10:16
这个杠H呢,H代表的其实就是hier的意思说可以在周期性。周期性数据输出的时候呢,输出多少行数据?之后啊,输出一个表头的信息啊,说的还挺绕口是吧,咱直接演示就行啊,嗯,大家你注意看啊,我们在这个杠T的后边。我在这个位置,我写一个杠H,然后呢,我来一个三吧,啊,再来一个空。这个这个空格啊,好来我去执行。行,大家应该能看到这个效果,这个H呢,就是hier的意思,其实代表的就类似于我们这个表头,然后这个三呢,就是每隔三条数据我们就打印一个表头,每隔三条数据就打印一个表头,啊就是这样的一个意思。
11:06
啊,就是这样一个意思,所以这儿呢,你看接下来他就接着往后走呗。哎,所以很好理解是吧,好,那至此的话呢,咱们就把这个以某一个具体的option先确定下来,之后剩下的这几个参数咱们给大家呢介绍清楚了,然后翻回来,咱们现在来看一下具体的都有哪些option,以及呢,我们说最关心的。啊,咱们最关心的在这儿写着呢,是不是就是这个垃圾回收的问题,还有内存泄露的问题,对吧,那我们看这个option呢,它是怎么来体现关于这块问题的一个解决的啊,或者叫监控的。行,这呢,我们先把这四个参数说清楚。
我来说两句