00:00
好,同学们,咱们刚才呢,就把这个堆栈方法区相关的这样的一些指令呢,呃,就给大家说完了,那这里边这些指令呢,比较多一些,哎,应该呢是在刚才哎我讲的这个过程当中啊,哎,大家应该一边听一边呢去做一个记忆,呃,因为呢,在实际我们如果啊对这个程序进行一个调优的话呢,哎,内存中的这些参数呢,诶是少不了的,那是少不了的啊这里边呢,虽然说有一些我们可能不用设置,比如呢,像我们这个新生代的对象,它呢,要进入老年代的这个临界值啊,比如说我们一般的话都不会去改了,对吧?那这个值是多少呢,你也得清楚啊,比例啊,新生代老年的比例啊,Survivor ratio啊对吧,这样的一些值呢,大家也得知道啊。好,那这个就过了啊,大家该记得记一记啊,嗯,咱们看下一步这个呢,叫auto memory相关的一个选项啊,你看我们这里边这个标注呢,就不太多了啊,看一看这个内容,这个内容的话呢,其实大家呢,也不陌生,咱们在讲到这个第二章讲这个弹幕文件的时候呢,其实咱们用过啊,咱们用过呃,包括呢,第三章当中我们呢,呃,在程序当中让他去自动的去生成一个大文件的时候呢,用过这样的这个指令。
01:09
好,这块呢,相当于是一个总结啊,大家看一下啊,在这里边的话呢,我们主要呢,其实涉及到的,呃,先说上面这三个啊,这三个里边的第一个啊叫keep downmp on auto memory error,哎注意你看第一个跟第二个呢,是不是都是一个布尔类型的呀,哎,就是说触跟force的意思啊,那默认的时候呢,我们这个呢,其实都可以理解成是没有开启的啊,这个呢,就是当出现这个OOM这样的一个error的时候呢,我们就去生成一个hip dump文件。非常的清晰是吧,而这个呢,就是我们生成这个黑大文件呢,是在before for jc之前生成的,诶那这时候我们想跟大家强调,就是第一个指令或者第二指令,我们二选一就行。呃,二选一默认情况下呢,他们都是没有开启的啊,那这两个指令呢,其实都是用于我们生成堆的转储文件的啊,方便呢,我们接下来是不是通过,嗯,你图形化界面的工具也好,或者呢,我们是使用这个解he也好,当然我们解he用的很少了啊,这这个90都已经干掉了是吧?啊那我们进行分析的话呢,首先你得有这个大文件才可以对吧?好,那这个大部文件的话呢,就是生成的一个时机,我们通过这两个呢,二选一就行。
02:21
那第三个指令的话呢,我们前面也都提到过了,就是说呃,我们如果有前面的二选一之后呢,你要是没有写这个keep up的一个pass,默认的就在你这个程序的当前路径了。对吧,诶当前这个路径下了,那呃,如果我们要是去指定的话呢,它就会把这个对的一个大文件呢,放在我们指定的这个路径下,哎,这就是它的一个特点,好,那尤其是上面这两个的这个区别呢,咱们给大家稍微的提一下啊,那这块呢,大家来看我这里边的个程序啊,我这写了一个叫he Du instance这样一个程序,好,这个程序的话呢,我们这有一个哎类是吧,这个类里边呢,我声明了一个这个程序面料,它呢是这个十兆的一个大小,哎,十兆的一个大小,然后这个程序跑起来之后呢,先让它停顿了这个呃,两秒钟啊,接下来的话呢,我们就创建个list,诶这呢,我们先给它整小一点啊,50个啊先呢造50个啊hi dump instance的这个实例。
03:15
那50个的话呢,里边主要呢,它有这个程序变量,这个是十兆,哎,大概就是500兆的意思是吧?好,那这时候呢,我们去来做个设置啊,大家注意看,此时呢,我们找到当前的这个程序。那针对我们这个第四个啊,这个module啊啊,这里边儿啊,这个没有它了啊,这里边儿的话呢,我们想操作的这个类啊,这个四里边是吧。是我们这个啊,刚才说的这个程序啊,点上OK,嗯,在这呢里边呢,首先我们来设置一下这个堆的一个初始的一个大小啊还记得吧啊S是吧,这个我们整成600兆,然后哎,叉X叉。它呢叫XMX是吧,这挺绕的啊,这呢也是这个600兆,然后的话呢,大家注意,哎,在这两个基础之上,哎,我现在咱们先把这个程序先咱先跑一下看看啊,看看他目前呢会不会出现这个OM。
04:09
哎,两秒钟之后呢,他做一个执行。诶没有是吧,哎,程序呢,正常执行结束,因为我们最后呢,有一个输出语句,好,那这种情况下呢,大家注意看我呢,先使用咱们刚才说的啊on auto memory error出现error的时候呢,我们去生成这个这个文件啊,我把这个指令呢给它加上。哎,这个指令加上是吧,这个指令加上之后呢,我们如果这样你去执行出现这个OM的话呢,生成这个就在默认路径下了,咱们现在呢,给大家再指定一个具体的一个路径啊,把这个的参数通常我们都会也给它加上,我这呢是把它放在了咱们D盘下啊,生成这样的一个文件没问题是吧?它呢是一个呃,非布尔类型的,前面这个属于一个布尔类型,所以我们这用的这个加号对吧?OKOK,行,那首先呢,咱们来看一下我当前这个地盘哈。
05:00
好,大家看我当前这个D盘下呢,是不是没有,我们说要导出对应的那样一个单文件是吧?诶没有这个nh box文件啊没有好现在呢,我们把这个程序呢给它跑起来,大家想想看,它会出现这个单文件吗?啊,结束了对吧,从这个呃,控制台这块来看的话呢,其实也没有提示去生成这个h crop文件,然后在我们D盘下呢,你看也没有对吧?诶没有我们想要的这个文件了啊为什么呢?哎,就是因为咱们当前这个程序注意啊,咱们当前这个程序呢,是不是没有出现OM对吧,既然没有出现OM呢,我们就不会生成这个大部分键,所以on呢,就是在什么什么的时候啊,在OM的时候才生成好这呢你就知道这个参数的一个特点了,然后呢,咱们把这个参数呢,换成咱们中间的这个参数。啊,这时候大家看它俩的一个区别啊,我把这个呢换掉。那CTRLV好,我换成了,就是在我们出现这个forc之前呢,去生成这个单文件,好我做一个OK。这时候呢,我们再做一个run。
06:03
两秒钟之后。诶大家看到了,此时的话呢,是不是程序结束之前帮我们生成了一个h pro文件对吧?哎,那这个文件的话呢,我们打开D盘,诶大家会看到,诶就确实帮我们去生成了,所以说呢,哎这个区别就是说哎这儿呢,在出现这个OM之前,程序正常结束之前呢,它是可以帮我们去生成这样的一个文件的。哎,生成这样个文件就是要么呢,就是我们这没有出现这个OM啊for,呃,就是这个for jc之前,应该说哈,就是for jc之前,就是我们OM之前呢,是一定会有for jc,但是for GC之后呢,不一定OM对吧?哎,这个大家应该清楚啊,哎,在我们出现这个for GC之前呢,我们要进行一个大文件的一个转出,有可能你这个程序呢,诶我们说叫执行结束了,也有可能呢,它是不是呃一直像我服务器上的这个程序,它是不是就一直都在跑,对吧,那这时候呢,你只要你出现这个for GC了,哎,我们就会在它之前生成一个啊对应的一个专属文件啊,这是这个参数的一个意思啊,而上面这个参数的话呢,主要针对就是我们出现OM的这一刻,我们想看一看它诶。
07:08
这个这个大文件是什么样子的,对吧?啊这个意思行,那下边你看我们做一个修改啊,我把这个呢,循环次数改成500了,那500呢,再乘以这个十兆啊,这个就5000兆了啊,那显然呢,是超出了我们这个对空间的一个大小了,那这时候呢,咱们看一看这个情况啊,诶CTRLC一下这呢,我不妨把这个D盘下的这个文件呢,咱们先给它干掉是吧,好我干掉了啊。干掉以后啊,大家回回过来,嗯,我改成500以后,那咱们先别改这个配置文件了。啊,先别改这个参数了,现在用的还是这个叫on,呃,Before for GC是吧,哎,我做一个OK吧,好,此时的话呢,我们做一个run执行。哎,看看这时候出现OM的时候呢,会不会呃,用这个参数也能够帮我们去生成好结束了对吧,结束之后呢,大家会发现它也帮我们生成了,好像不止一个是吧?来我们看一下这个地盘好这一个这个这个诶。
08:02
为什么我们这里边儿有好几个呢,大家想。为啥好几个呀。哎,那其实呢,我们从这个参数上呢,是不是也能够看出一些端倪的,什么意思啊,你看它叫这个,呃,这个比for for这C之前生成这个大文件,我们相当于这个程序呢,最后出现OM了,哎,咱们说这个出现OM呢之前它是一定会。诶有这个fordc的是吧?AOM之前会有这个fordc,那我们现在呢,有仨文件,那其实就意味着我们是不是之前呢,在出现这个OM之前,咱们执行过三次fordc吧,诶每出现一次fordc,咱们呢,就生成了一个这个a pro文件啊,那由于呢,我这块呢,强制的是不是给他还指定了一个名字,所以说呢,诶他这块再帮我们生成的时候呢,他就后边给我们来了一个叫点一,来了个点二啊是这样子的啊,相当于是有这样的三次,哎,一个forc的一个行为,所以呢,就会有三个文件啊。
09:00
好,这块呢,我们就不具体打开这个文件来看了,咱们前面两张呢都说过了,然后的话呢,诶大家看啊,我把这个中间的参数呢,改成上边这个参数啊,CTRLC做一个替换。哎,把它呢,给它改掉对吧。哎,CTRLV啊改掉了啊,改掉之后呢,我们来一个OK,这时候我们再去执行。啊,再去执行,那这个时候的话呢,咱们看一看出现了这个auto memory了啊,因为整个咱们这个堆内存空间不够是吧?哎,然后呢,也帮我们也生成这个,呃,相关的这个大文件啊,这时候我们打开这个D盘,那这块就有了是吧,这块呢就只有一个了吧。对吧。你想我们程序出现OM了,是不是就不再执行了呀,所以呢,在出现omm的这个时候呢,帮我们去生成这个堆的一个大文件的啊,是这样的一个场景啊行,那通过我刚才这样一个讲解,想必呢,大家应该是对这两个参数呢,应该有一个比较清晰的一个认识了。啊,如果呢,我们在程序当中发现频繁的出现for jc啊,这个程序呢,但是没有挂对吧?那这个时候呢,我们就要关心一下这个for jc它到底是由于什么情况导致的啊,我们频繁去出现,诶咱们就可以使用中间这个参数,每出现一次POC,我们就能给它导一次啊那哎,当然是出现之前导你podc之后的话呢,内存是不是已经都降下来了,这个看不出来了是吧?哎在他呢,马上要放这C的时候,诶生成它之前的这样一个文件啊。
10:24
那这个呃,有的时候呢,我们这个程序呢,它直接就挂掉了,那我们要看到它挂掉的这个时候啊,挂掉的这个时候,它这个内存情况是如何的,所以我们就可以使用上面这样的一个参数啊,这个是有不同的场景的啊好,那这块呢,我们回过来。啊,回过来啊,嗯,这三个参数就过了,然后呢,最后这个参数呢,叫on auto memory error,注意大家注意看啊,这个参数的话呢,它不是一个加减的,意味着它是一个非波尔类型的,是不是后边我们要给它指定一个直的就是吧,什么意思啊,它呢是可以指定一个可行性的程序或者是脚本的一个路径啊,当发生oom error的时候呢,你希望做什么事?
11:09
其实就是这个意思了是吧?哎,那这个呢,通常就是我们在这个运维过程当中啊,会去使用的一个指令啊呃,运维过程当中,比如说呢,如果我们发现这个程序出现OM了以后呢,咱们就选择将我们当前这个服务器的这个程序呢,给它做一个重启,诶这个时候呢,就是我们的一个具体的行为。啊,而且还属于我们上面讲的那个指令里边的非布尔类型,哎,后边这个Y6KY6Y6写的是一个string类型的是吧?哎,String类型呢,相对说少见一些啊,更多的都是那个数值类型的。诶,然后具体的关于我们这个,比如link下的那个SH这个文件怎么去写,呃,Window下这个文件怎么去写,这块呢,我给大家粘住这个实例代码了啊,这体代码啊,这块呢,我就诶不刻意的再给大家去做这个演示了啊后边我们比较多的这个案例的这个章节当中,哎,咱们给大家呢,在Linux环境下呢,去做这样的一些展示啊,这块呢,我就先主要来讲这些指令。
12:03
行,这个应该很清楚是吧,哎,就是当你出现OM的时候呢,哎,我们需要做重启,那这时候重启的话呢,直接就写到我们这个参数里面了啊好,那这块呢,咱们就把这个出现OM啊,当然也不一定非得是出现OM,还有这个forc的这个情况呢,哎这几个选项啊,就给大家讲解了,应该说是非常实用的,在我们通过大文件呢去了解哎程序到底内存是什么情况的,这个这个情形下,哎,我们是要用到这样几个参数。好,这个大家需要熟悉啊。
我来说两句