00:00
好,我们介绍完参数调优之后呢,紧接着有GM调啊,我们常规而言的GM调优呢,有两个思路啊,一个是内存的一个设置啊,那对于at的region server而言呢,你设置为16个G还是32个G,都是比较合理的一个范围啊,具体的值呢,取决于你电脑的硬件设备啊,你说你电脑没有这么多内存,我让你设置这么多内存,那可不可以呢?那肯定不可以,对不对啊,你要根据你电脑的实际情况而言,这个呢,咱们就不聊了啊,看你有没有钱了啊好,第二个呢,是垃圾回收器的一个设置啊,那这个呢,不管你是贫穷还是富贵哈,都可以来使用一下,好,我们垃圾回收的修改的目的呢,是使用一个并发的垃圾回收,默认的po加是一个并行的垃圾回收啊,这是针对什么新生代和老年代的,对吧?具体的内容呢,你要到GVM的课程里面去学习,咱们只做一个简单的介绍,它默认的这个并行呢,会暂停掉整个线程,所有的一个线程对吧,全部都停下来等垃圾回收。
01:01
完了之后再进行操作,它之所以会暂停的原因呢,也非常的简单,因为呢,在常规的GM使用的时候,GVM使用的时候,它这个对内存里面啊,存储的大量的都是类和对象。那这个类和对象在进行删除的时候需要非常的谨慎,你想一下是不是如果你删除错了,很有可能整个进程就崩了,所以他们这些垃圾回刷一定要把所有东西都停下来,慢慢的操作,操作完了之后呢,再继续让整个进程啊去运行,让GM再跑起来,对吧?所以呢,它会有大量大量的一个暂停时间啊,而我们的h base的内存呢,不需要去执行这种。暂停时间,为什么?因为我的主要内存又干嘛了,存数据了,我们刚介绍完40%读缓存,40%写缓存,80%的内存都存数据的,存数据去删除没有这么麻烦的,它跟存那个对应的对象是不一样的,存对象要很谨慎,存数据怎么办呀?那不要的数据咔,全清掉搞定。
02:03
对吧,它是非常速的,所以我们没有必要为了这么一件事而进行大量的一个暂停时间啊,进行大量一个暂停时间,那同时呢,存数据还有一个特点,就是它容易造成一个数据洪峰,造成它的一个OM,你比方说大量的数据一下子涌入到了写缓存里面,那你是往里写还是不往里写呢?对吧,尽管上面有一个刷写机制啊,刷写机制呢,会部分解决这个问题,对吧,一方面呢,有刷写机制,另一方面呢,有一个高水位线的一个控制啊,尽管有这些,但是你还是要考虑这个情况。数据呢,就会有这个特点,来的时候特别快,删的时候也特别快啊,那这时候呢,我希望怎么办呢?希望能够尽早去进行垃圾回收啊,尽早去进行垃圾回收,因为我进行垃圾回收啊,写缓存的数据也是不能够垃圾回收的,就有40%你也动不了写缓存数据,一旦垃圾回收,你这个region server要接下来要有很多工作要重新去做企业缓存的数据垃圾回收,就好比你的工作删库了,就一个概念嘛,它的活全部都要重新干,一般不会这样去做,对不对,我们主要回收到什么?毒缓存嘛,主要你回收的就是毒缓存,而毒缓存垃圾回收呢,是不太影响性能的,它不能叫不影响性能,对不对,还是会影响到读的性能的啊,影响到读的性能,但是不太影响性能,因为你在读缓存里面删除的是很早之前读过一次的数据,那个64K的块。
03:30
会存在这个里面,所以我尽早清理,尽早结束,同时清理的时候呢,不要暂停别的线程,咔一下把这个数据全删掉就可以了啊,主要回收的就是读缓存里面的别的内存。写缓存里面是不能进行垃圾回收的,写缓存是自动刷写出去自动清除掉的,对吧?哎,它是这么一个机制啊,所以我们最终这个呃,GM条约啊,它总结就是防范于未然,早洗早轻松啊,那这个呢,就是它的一个主体思路,具体如何实现呢?咱们一点点来看,首先它使用CMS垃圾回收器,这个CMS呢是一个并发的。
04:07
啊,并发的,哎,什么意思呢?就是你能够一边使用一边往里写,另一边呢,它自己去进行一个垃圾回收啊,慢慢来,在呃,使用CMS这个垃圾回收器的时候呢,看起来很美好啊,但实际上它会有很多的一个问题,就像我们之前说的,如果你都是大量的内核对象的话,你不能用这个啊,它不够精细对吧?啊,我们还是应该用默认的po加啊这种暂停世界了,我们用这个是因为我们回收的大量都是数据啊,数据这玩意儿,你说它不用了,删咔一下全删掉就可以了啊,就跟你删你的这个小视频小电影一样,对不对,你说你不看了,是不是一删咔一下你的内存就都有了呀,但如果你删你的作业啊,删你的这个作业一个一个的T文本,你删的时候就会非常小心啊,就是这么来的啊,好,这个时候他删的很快,所以用CMS除了用这个并发的垃圾回收器之外呢,还有一个保证啊,第一点保证新生代要尽量小,同时呢,要尽早开启GC垃圾回收,就是这个防范于未然,早洗早轻松嘛,你要避免突然。
05:08
但很大的一个数据导致你数量不够用,所以我们设置内存占用到70%的时候,都就已经开启垃圾回收了啊,先来去搜索一下,同时呢,指定我就要用这个70%,不要让GM去动态调整,我们限制的非常死,就一定是内存到70%垃圾回收,内存到70%垃圾回收因为什么?因为它是并发的,不会影响到你整个的一个。线程的一个使用啊,不会影响到你服务的正常运行,让他提前进行啊。新生代内存呢,设置小一点啊,512兆啊叭,较合理的一个范围,同时呢,并行执行新生代的一个垃圾回收啊,人为的给它写上就可以了啊,这里呢,还会有一个设置啊,设置这个SC啊,Scanner扫描结果占用的一个内存大小啊,在h base当中设置,设置的这个值呢,默认值为两兆啊,为这个呃,新生代空间的1/8。
06:03
啊,1/8,你把这个值啊,就是写大一点啊,写大一点啊,扫描的一个大小啊,这是一个特殊的一个值对吧?这个值呢,默认值是两兆啊,你可以呢,把它给调大一点啊,这都是可以的啊同时呢,设置多个与这个最大一个内存乘以它啊相乘的一个这个啊,进程的一个数啊,连接的一个数相同的结果呢,要小于新生代经过垃圾回收之后存活的一个对象啊,那这个呢,其实你不设置它也是满足的,他只是给你提一个醒啊,提一个醒啊这叫。什么呢,存活存活空间对吧?好,这整一套的,这个GM的调用呢,在官网上都有相关的一个介绍啊,我们呢,可以直接拿来用啊,当然你说呢,我对GM了解不是很深,我不用行不行,当然也可以,对不对,哎,当然也是可以的,当然这个呃,修改垃圾回收器以及这个垃圾回收的机制呢,哎,介绍起来呢,还是比较清晰的,同时清理的都是什么,清理的都是。
07:01
读缓存吗?清理的主要就是读缓存,而写缓存呢,它自己会往外刷写的,刷写完之后他把数据就删除掉了,所以我们尽早进行,不要让它暂停,全世界会让我们的整个的这个瑞serve的性能呢,更高一点啊,这是我们整个的一个GVM调优啊。
我来说两句