千家信息网

如何回答解决OOM类问题

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这期内容当中小编将会给大家带来有关如何回答解决OOM类问题,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。上次出去划水被问道如何快速解决线上OOM问题,由于本人菜鸡一
千家信息网最后更新 2026年11月03日如何回答解决OOM类问题

这期内容当中小编将会给大家带来有关如何回答解决OOM类问题,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

上次出去划水被问道如何快速解决线上OOM问题,由于本人菜鸡一个答不是很好,因此回来查阅资料和咨询了一下其它大佬总结了一下。

一、为什么会OOM

主要是以下两点:

1、分配的内存少了:比如虚拟机本身可使用的内存(一般通过启动时的VM参数指定)太少。

2、应用用的太多,并且用完没释放,浪费了。此时就会造成内存泄露或者内存溢出。

内存泄露:申请使用完的内存没有释放,导致虚拟机不能再次使用该内存,此时这段内存就泄露了,因为申请者不用了,而又不能被虚拟机分配给别人用。

内存溢出:申请的内存超出了JVM能提供的内存大小,此时称之为溢出。

二、OOM的类型有哪些

按照JVM规范,除了程序计数器不会抛出OOM外,其他各个内存区域都可能会抛出OOM。

JAVA虚拟机在运行时会管理以下的内存区域:

1、程序计数器:当前线程执行的字节码的行号指示器,线程私有。

2、JAVA虚拟机栈:Java方法执行的内存模型,每个Java方法的执行对应着一个栈帧的进栈和出栈的操作。

3、本地方法栈:类似" JAVA虚拟机栈 ",但是为native方法的运行提供内存环境。

4、JAVA堆:对象内存分配的地方,内存垃圾回收的主要区域,所有线程共享。可分为新生代,老生代。

5、方法区:用于存储已经被JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。Hotspot中的"永久代"。

6、运行时常量池:方法区的一部分,存储常量信息,如各种字面量、符号引用等。

7、直接内存:并不是JVM运行时数据区的一部分, 可直接访问的内存, 比如NIO会用到这部分。

最常见的OOM情况有以下三种:

1、java.lang.OutOfMemoryError: Java heap spacejava

堆内存溢出,此种情况最常见,一般由于内存泄露或者堆的大小设置不当引起。对于内存泄露,需要通过内存监控软件查找程序中的泄露代码,而堆大小可以通过虚拟机参数-Xms,-Xmx等修改。

2、java.lang.OutOfMemoryError: PermGen spacejava

永久代溢出,即方法区溢出了,一般出现于大量Class或者jsp页面,或者采用cglib等反射机制的情况,因为上述情况会产生大量的Class信息存储于方法区。此种情况可以通过更改方法区的大小来解决,使用类似-XX:PermSize=64m -XX:MaxPermSize=256m的形式修改。另外,过多的常量尤其是字符串也会导致方法区溢出。

3、java.lang.StackOverflowError,不会抛OOM error,但也是比较常见的Java内存溢出。JAVA虚拟机栈溢出,一般是由于程序中存在死循环或者深度递归调用造成的,栈大小设置太小也会出现此种溢出。可以通过虚拟机参数-Xss来设置栈的大小。

三、如何分析OOM问题

分析OOM我们必须获取dump堆的内存镜像。

可以采用如下两种方式:

1、设置JVM参数

-XX:+HeapDumpOnOutOfMemoryError,设定当发生OOM时自动dump出堆信息。不过该方法需要JDK5以上版本。

2、使用JDK自带的jmap命令。"jmap -dump:format=b,file=heap.bin" 其中pid可以通过jps获取。dump堆内存信息后,需要对dump出的文件进行分析,从而找到OOM的原因。常用的工具有:

① mat:eclipse memory analyzer, 基于eclipse RCP的内存分析工具。详细信息参见:http://www.eclipse.org/mat/,推荐使用。

②jhat:JDK自带的java heap analyze tool,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言OQL,分析相关的应用后,可以通过http://localhost:7000来访问分析结果。不推荐使用,因为在实际的排查过程中,一般是先在生产环境 dump出文件来,然后拉到自己的开发机器上分析,所以,不如采用高级的分析工具,如前面的mat来的高效。

网上这个链接:https://0x9.me/c9jS1中提供了一个采用mat分析的例子 。

注意:因为JVM规范没有对dump出的文件的格式进行定义,所以不同的虚拟机产生的dump文件并不是一样的。在分析时,需要针对不同的虚拟机的输出采用不同的分析工具(当然,有的工具可以兼容多个虚拟机的格式)。IBM HeapAnalyzer也是分析heap的一个常用的工具。

上述就是小编为大家分享的如何回答解决OOM类问题了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

内存 分析 方法 大小 信息 可以通过 工具 情况 问题 参数 对象 文件 程序 运行 不同 区域 常见 常量 线程 分配 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网络科技 互联网科技公司排名 疫情对互联网科技公司影响 金融科技与互联网金融 互联网科技宣传片 人人互联网科技是培训 互联网科技公司需要的职位 中盈科技互联网信息有限公司 以后互联网后是啥科技 智腾互联网科技有限公司 民营互联网公司国防科技 天津腾达互联网科技有限公司 华夏恒生科技与互联网科技 滨湖区互联网智能科技产品有哪些 锡山区互联网智能科技产品供应 互联网企业科技类企业如何做账 盐城市攀科互联网科技有限公司 互联网对科技影响 承德科技产业互联网平台 恒生科技互联网指数十大成分股 上海睿民互联网科技有限公司 科技与互联网发展 喔噻互联网科技 亿账通互联网科技 顺玮阁互联网科技 成都玖崟互联网科技有限公司乐商圈怎么样 互联网科技研发水平 35岁以上互联网科技行业 2021世界互联网领先科技成果发布 伍佰万互联网科技是干嘛的
0