缓存溢出(手机缓存在哪里清除)

上次给老公们讲了死循环cpu飙升的故障排除过程。今天,我带着我的丈夫们来看看我们通常是如何解决堆内存溢出问题的。cpu100%排查文章:阿里程序员把线上CPU打

上次给老公们讲了死循环cpu飙升的故障排除过程。今天,我带着我的丈夫们来看看我们通常是如何解决堆内存溢出问题的。

cpu100%排查文章:阿里程序员把线上CPU打到100%,同事吓坏了(附排查经过)

在排除故障之前,我想大家都知道jvm的基础知识吧?

老婆我就是不了解,人家要你说给我听。

好吧,好吧,呃,真的没什么办法,我就带你回到JVM的内存模型(这个东西和JAVA内存模型JMM不一样,不要误会)

今天我就说堆,因为溢出是堆里发的。

JVM堆内存分为两部分:年轻一代和老一代。

年轻代

年轻一代是所有新事物诞生的地方。当年轻一代内存空用完时,会触发垃圾回收。这种垃圾收集称为次要垃圾收集。

年轻一代分为三个部分——恩登区和两个幸存者区。

年轻代空间的要点:大多数新建的对象都位于Eden区。当Eden区被对象填满时,就会执行Minor GC,并把所有存活下来的对象转移到其中一个survivor区。Minor GC同样会检查存活下来的对象,并把它们转移到另一个survivor区。这样在一段时间内,总会有一个空的survivor区。经过多次GC周期后,仍然存活下来的对象会被转移到年老代内存空间,通常这是在年轻代有资格提升到年老代前通过设定年龄阈值来完成的。年老代

老年内存包含已经存活了很长时间的对象和那些已经存活了许多次要GC时间的对象,并且它通常在老年内存满时被垃圾收集。

GC种类Major GC

旧的垃圾收集称为主GC,通常相当于全GC,收集整个GC堆。

分代GCYoung GC:只收集年轻代的GCOld GC:只收集年老代的GC(只有CMS的concurrent collection是这个模式)Mixed GC:收集整个young gen以及部分old gen的GC(只有G1有这个模式)Full GC

全GC的定义比较清晰,就是整个新一代,老一代,meta 空 (metaspace,java8以上替代perm gen)的全局GC。

缓存溢出(手机缓存在哪里清除)插图

老公们从上图可以看出,后辈分为一个伊甸区和两个幸存者区(S1,S2),幸存者区同时只会有一个满空,交替进行。

然后GC一直到老年才达到一定的门槛,今天不谈永久代,就忽略了Mataspace。

老婆:那怎么分析呢?

今天,我将使用jvisualvm,一个JDK自带的工具,向您展示它是如何工作的,因为每个人都有这个东西。你可以去命令行轻敲JVM就出来了(Mac是这样的,不知道Windows是什么样子的)。

操作界面:

缓存溢出(手机缓存在哪里清除)插图(1)

一般什么情况可能是出现了溢出呢?

超时、无服务、死服务、接口不在服务中等异常问题。

模拟也很简单。我写了一个循环,并不断地将数据放入列表中。不用列表也能看出现象。

缓存溢出(手机缓存在哪里清除)插图(2)

老公看得出来,图形界面还是很清晰的。这是Visual GC的插件。

缓存溢出(手机缓存在哪里清除)插图(3)

大家点击菜单栏里的插件,然后安装。请记住在安装后单击激活。

缓存溢出(手机缓存在哪里清除)插图(4)

可以看到,heap 空会一直往上,直到OOM(内存不足)。

缓存溢出(手机缓存在哪里清除)插图(5)

这个时候,我们就把资料往下倒,往上堆。

缓存溢出(手机缓存在哪里清除)插图(6)

Dump会产生这样一个hprof的快照文件,可以被jvisualvm自己的系统分析。这里推荐MAT,因为我习惯了这个。

缓存溢出(手机缓存在哪里清除)插图(7)

MAT:下载地址

我们可以看到马特分析了我们的文件。

缓存溢出(手机缓存在哪里清除)插图(8)

看,他是个暖男,还帮我们分析了一个问题。我们去看看。

缓存溢出(手机缓存在哪里清除)插图(9)

他发现这是数组列表的问题。我们再往下看。

缓存溢出(手机缓存在哪里清除)插图(10)

看,特定代码的位置已经帮助我们定位了它,然后筛选就是手到擒来了。

缓存溢出(手机缓存在哪里清除)插图(11)

延伸点

我们使用上面的工具跳转,那么我们如何到达服务器跳转呢?

jmap-dump:format=b,file = & ltdumpfile.hprof & gt& ltpid & gt有可能是我老公问的。不是所有失败的时候我们都在场,我们不能及时跳跃。这很简单。

-xx:+heapdumpooutofmemory error这个东西配置好之后,会在oom期间自动跳转。到时候拍个快照分析一波就好了。

凉席的作用有很多。百度和谷歌的工具文本太多,重复性的工作我就不做了。比如我可以查对象的强弱引用,查引用链。

只写这么一点还有一个原因,因为有点晚了,我受不了。最近因为事情太多,有点忙,没有做视频。希望老公们照顾好自己。顺便说一下,Redis的分布式锁已经在路上了。

我是敖兵,一个在网络上苟且偷生的工具人。

最好的关系是相互成就,夫妻俩的“三人行”是C C创作的最大动力。下次见!

注:本博客如有错误和建议,欢迎留言。请说点什么,亲爱的!

你知道的越多,你不知道的就越多

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/111343.html

发表回复

登录后才能评论