00:00
现在我们看一下什么时候来使用这一个堆外缓存,那么大家首先这个要明白堆内跟堆外的区别,这个是堆内吧,这个是堆外吧,那咱们是JJM的,其实堆内内存使用的就是JVM内存。堆上内存,那这堆外内存呢,就不不是JVM管了,它使用咱们系统的物理内存,那这个时候区别最大的就在于有没有GC的管理。JM会自动帮我们做垃圾回收。同时他垃圾回收的时候,它当然分袋对吧?啊,那个年轻袋老年袋,那年轻带的是很快就被收集掉,老年袋就是呃。不回收的那一些啊,那么这就有一个问题了。如果咱们使用了catch。那么需要缓存大量的数据在那个内存上面堆内内存,假设不使用对外的话,那这个时候这些数据是一直要使用的,所以它没法被年轻贷给回收掉,最终它会进入一个老年代。
01:06
大对象长时间使用的这些,多次GC都GC不掉,那假设咱们的对象内存一共十个G。那这个时候,比如说缓存的数据已经占了七呃九个G。而且这九个G呢,经过多次的GC啊,它始终回收不掉,而且它又很容易触发一个叫负耳GC,咱们负耳GC是多次不负耳机C,影响是特别大的,因为它会停止咱们的运行,然后去做一个垃圾回收,因为咱们本身这些已经占的特别大了,可用空间里稍微用一点点内存就会触发一个负尔GC,所以这个是不太合适的啊,那我们如果使用了一个对外的内存,我们将缓存的数据放在堆外里面。那么堆堆内的内存空间这一块就释放掉了。那我们就可以把堆内的内存集中用来运行时需要的内存,对吧,也就是说你要执行shuffle啊,要执行join group啊这些呢啊程序有足够的内存来运行,同时呢,也不会频繁的来触发一个。
02:12
那这样呢就非诚合理合适了,那我们呢,也通过一个案例来看一下怎么来看我们堆外内存的使用,来看一下咱们的代码啊,咱们的代码跟前面都一样啊,咱们是查询了一张表,转成了DS data set,然后对它做了一个持久化,持久化这里咱们选择了一个什么。Of he啊,这边给大家加个注册另存九化到堆外内存,也就是说使用堆外内存做一个咱们的缓存操作啊,然后呢,就没有了,那我们实际执行来看一下,那我们提交参数呢,堆内的内存还是给了五个G,那么堆外的大小给了一个G。
03:01
同时我们还知道应该有一个开销对吧?呃,如果按照内五个G应该要512兆,384取最大,那就是512,所以总的呢,需要6.5个G的内存,那我们看一下对外的使用吧。啊,这边有个空格。提交。提交完之后,咱们是可以在页面上看到相关的情况。好,咱们必须在任停止之前来看呢,所以这个时候咱们通过雅安来看呢,啊雅。诶,然后呢,点击这里进入运行时的页面。好,稍等一下,那我们可以从哪里看呢?看。看堆外的话,咱们要来cute看一下啊,那在这里呢,咱们把这个额外的指标打开,这里可以看到一个什么堆内的内存,堆外的内存,我们把它都勾上,那这个时候它就会显示了,这个就是。
04:13
对外内存的使用,这个是堆内存储内存的使用。看下面。好,其实我们已经看到了,对吧。这个时候咱们的堆外内存已经占用了,你看这个这边用了六七十兆,60多兆啊,这100多兆,这个时候你看咱们的数据缓存在对外里面不会影响咱们的。呃,具体的一个内存啊。那说到这个,大家来一起回忆一下内存的知识点,这个东西是不是存储内存,来回忆一下这个。嗯,咱们最前面在内存介绍到了这么一个统一内存模型。
05:05
有的同学可能会觉得数值对不上啊,数值对不上。那我们计算一下来堆内内存咱们是不是五个G啊,指定的啊,然后统一内存占0.6。是不是应该是三个G啊。对吧。那我们看现在是给到多少。3.5。所以其实这个存储内存指的是什么?就是web UI上显示的这个storage memory指的是这两个的总和。而且呢,还要再加上一块一些预留的啊,那有些小偏差,这个正常啊。他指的是咱们。图里的存储内存加执行内存的总和啊,并不是说单单的指这个存储内存,不是这么一回事啊,不是这么一回事。然后。
06:00
我们看一下。嗯。还没完啊,还没完,咱们存储内存它还是加上堆外的,不信咱们想想以前那些,嗯,那张图我再放出来啊,再具体给大家仔细算一遍,一类是五个G啊,那么五个G的话。呃,扣掉300兆,扣掉300兆,然后呢,乘以0.6,这个是它俩的和这个值呢,外幺这个默认就是它俩的总和,那其实这个一乘出来是不是三个G不到啊,我们假设就三个G吧,那为什么是3.5呢?我说的再加一块是什么?对外内存,它这边是包括堆内跟对外,对外内存默认只分两块,一块就是storage,一块是execution。那storage呢,咱们咱们总的对外是不是给了一个G啊,开销那个384512就不用算上了,那这个时候他俩是一半一半的,那再乘以50%。
07:03
那你再相当于说再加上一个G50%是500兆,那不就等于3.5嘛,对吧,是这么一个意思,突然想起来给大家提醒一下这个东西啊。是存储对内的存储加执行对外的存储总和行,这个是咱们看到的一个效果,现在应该执行完了,咱们那个页面可能就看不到了啊。这是一个堆外内存的使用啊,想起来给大家一起分析分析。一般呢,使用技术上,刚才讲的需要缓存的比较大啊,那我们就考虑,而且一般是很多很多的啊,比如说啊几十个G啊。或者十来个G啊,这种完全可以使用对外内存把它利用起来,这是也是咱们的一个调优手段。
我来说两句