17.互联网大厂高频面试题-OOM

文章目录

  • SOFE之stackoverflowError
  • OOM之java heap space
  • OOM之GC overhead limit exceeded
  • OOM之Direct buffer memoery
  • OOM之unable to create new native thread
  • OOM之unable to create new native thread解决方案
  • OOM之metaspace

SOFE之stackoverflowError

17.互联网大厂高频面试题-OOM_第1张图片
首先stackoverflowError是错误,不是异常。
最简单的出发SOFE的操作,无限循环递归调用:
17.互联网大厂高频面试题-OOM_第2张图片
错误提示:
17.互联网大厂高频面试题-OOM_第3张图片
栈中压入了太多的方法给撑爆了,栈大小根据平台有默认值,linux内核的一般是1024k,win系统默认是0。

复习一下java异常的体系结构:
17.互联网大厂高频面试题-OOM_第4张图片

查看SOFE的的继承树:属于虚机机error
在这里插入图片描述
oom也是虚拟机错误。

17.互联网大厂高频面试题-OOM_第5张图片

OOM之java heap space

在这里插入图片描述

简单理解:堆内存不够用了。

触发代码如下,但是因为jvm在win平台上默认最大堆空间是内存的四分之一,所以很难撑爆,需要手动调小一点(10m)。
17.互联网大厂高频面试题-OOM_第6张图片
string的方法intern:https://blog.csdn.net/u011635492/article/details/81048150
错误效果:
17.互联网大厂高频面试题-OOM_第7张图片
直接new 字节数组,也可以,方法很多。

OOM之GC overhead limit exceeded

17.互联网大厂高频面试题-OOM_第8张图片
大量的资源被消耗来做垃圾回收,有用的工作只占很少的一部分。
代码演示:不断往list中添加string(不重复)
17.互联网大厂高频面试题-OOM_第9张图片
为了触发效果调整jvm参数:堆大小10m,降低直接内存的大小为5m。

运行效果:运行几秒之后,会触发gc overhead的异常。
17.互联网大厂高频面试题-OOM_第10张图片
可以看到爆发异常前产生了full gc,回收前后的young区大小差别不大2047—2047.出现了收不动的现象,老年区也是同样的现象。

OOM之Direct buffer memoery

这个错误跟元空间有关系,元空间使用的是本地内存:
17.互联网大厂高频面试题-OOM_第11张图片
这个错误,意思是把你的直接内存都干翻了!
这个故障结合2种技术出现:netty底层的nio技术。
17.互联网大厂高频面试题-OOM_第12张图片
那么如何查看分配的直接内存的情况呢?在rt.jar包里面。
17.互联网大厂高频面试题-OOM_第13张图片

做一个测试,针对16g电脑,直接电脑能利用的有:
在这里插入图片描述

17.互联网大厂高频面试题-OOM_第14张图片
内存分配模型:
17.互联网大厂高频面试题-OOM_第15张图片
触发Direct buffer memoery OOM异常的代码如下,需要配置一下vm参数:
在这里插入图片描述
在这里插入图片描述

运行效果:
17.互联网大厂高频面试题-OOM_第16张图片

会发现最后一次full gc收不动了,一般做nio程序的时候经常出现这个异常。这个异常反映了你是否知道nio。

OOM之unable to create new native thread

在这里插入图片描述
不能创建更多新的本地线程了。高并发环境下容易触发这个错,因为高并发往往需要创建多线程。
因为一个系统中的线程数是有上限的。超过上限就报错误。
这个异常是一个非常好的案例作为回答面试官的“说一下你的记忆深刻的故障”。
17.互联网大厂高频面试题-OOM_第17张图片
触发代码:
17.互联网大厂高频面试题-OOM_第18张图片
linux上试运行,注意如果带包名的java文件,需要"-d ."这种参数。
17.互联网大厂高频面试题-OOM_第19张图片
没有消息就是编译成功了。运行需要带包名:
在这里插入图片描述
17.互联网大厂高频面试题-OOM_第20张图片
会发现大约在1024个以内就抛出异常了。1024是理论数字,linux进程本身句柄也需要一些线程。

OOM之unable to create new native thread解决方案

17.互联网大厂高频面试题-OOM_第21张图片

17.互联网大厂高频面试题-OOM_第22张图片

17.互联网大厂高频面试题-OOM_第23张图片

会发现root用户无上限,但是普通用户有1024的限制。
17.互联网大厂高频面试题-OOM_第24张图片

OOM之metaspace

在这里插入图片描述
在这里插入图片描述
17.互联网大厂高频面试题-OOM_第25张图片
场景解释:
17.互联网大厂高频面试题-OOM_第26张图片
代码触发:
17.互联网大厂高频面试题-OOM_第27张图片
17.互联网大厂高频面试题-OOM_第28张图片
使用spring的动态字节码技术,不停的创建一个类。不停的生成模板不停的加载。
运行结果:
17.互联网大厂高频面试题-OOM_第29张图片

你可能感兴趣的:(面试题视频笔记)