今天跟大家一起聊聊线上服务出现 OOM 问题的 6 种场景,希望对你会有所帮助。
一、堆内存 OOM
堆内存 OOM 是最常见的 OOM 了。
出现堆内存 OOM 问题的异常信息如下:
java.lang.OutOfMemoryError: Java heap space
此 OOM 是由于 JVM 中 heap 的最大值,已经不能满足需求了。
举个例子:
public class HeapOOMTest {public static void main(String[] args) {List<HeapOOMTest> list = Lists.newArrayList();while (true) {list.add(new HeapOOMTest());}}
}
这里创建了一个 list 集合,在一个死循环中不停往里面添加对象。
执行结果:
出现了 java.lang.OutOfMemoryError: Java heap space 的堆内存溢出。
很多时候,excel 一次导出大量的数据,获取在程序中一次性查询的数据太多,都可能会出现这种 OOM 问题。
我们在日常工作中一定要避免这种情况。
二、栈内存 OOM
有时候,我们的业务系统创建了太多的线程,可能会导致栈内存 OOM。
出现堆内存 OOM 问题的异常信息如下:
java.lang.OutOfMemoryError: unable to create new native thread
给大家举个例子:
public class StackOOMTest {public static void main(String[] args) {while (true) {new Thread().start()