当前位置:网站首页>OOM(内存溢出)造成原因及解决方案
OOM(内存溢出)造成原因及解决方案
2022-07-07 03:21:00 【何以解忧,唯有..】
一、概念
内存溢出(Out Of Memory,简称OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。
二、造成原因
2.1、内存泄漏
由于长期保持某些资源的引用,垃圾回收器无法回收它,从而使该资源不能够及时释放,也称为内存泄露。因而尽量不要将所有引用都使用为强引用,可以在合适的地方使用弱引用和软引用。
2.2、超大对象
保存多个耗用内存过大或当加载单个超大的对象时,该对象的大小超过了当前剩余的可用内存空间。比如查询数据库中的数据,一次查询过多,直接导致内存溢出了。因此查询数据库如果数据过多尽量使用分页查询。
2.3、其他各种原因
比如是否存在死循环,大循环重复产生对象,是否有集合对象使用完之后,依然被引用着,导致无法清除,是否使用了不恰当的数据结构,导致占用空间过大等等。
三、解决方案
3.1、修改JVM启动参数,直接增加内存
JVM默认可以使用的内存为64M,Tomcat默认可以使用的内存为128MB,对于稍复杂一点的系统就会不够用。在某项目中,就因为启动参数使用的默认值,经常报“Out Of Memory”错误。因此,-Xms,-Xmx(堆内存的最小大小和最大大小值)参数一定不要忘记加。
3.2、找出可能发生内存溢出的位置,并解决
检查代码中是否有死循环或递归调用。
检查是否有大循环重复产生新对象实体。
检查对数据库查询中,是否有一次获得全部数据的查询。
检查List、Map等集合对象是否有使用完后,未清除的问题。
使用内存查看工具动态查看内存使用情况。
四、Xmn、Xms、Xmx、Xss参数的区别-含义及理解
首先,-Xmn、-Xms、-Xmx、-Xss都是JVM对内存的配置参数,我们可以根据不同需要区修改这些参数,以达到运行程序的最好效果。
4.1、-Xms、-Xmx
-Xms、-Xmx分配用来设置进程堆内存的最小大小和最大大小。
4.2、-Xmn
-Xmn用来设置堆内新生代的大小。通过这个值我们也可以得到老生代的大小:-Xmx减去-Xmn
4.3、-Xss
-Xss设置每个线程可使用的内存大小。
在相同物理内存下,减小这个值能生成更多的线程。当然操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
除了这些配置,JVM还有非常多的配置,常用的如下:
-XX:PermSize、-XX:MaxPermSize
分配用来设置永久代的最小大小和最大大小。Java 8以后移除了方法区,取而代之的是本地元空间Metaspace,大小由-XX:MetaspaceSize和-XX:MaxMetaspaceSize调节。
-XX:MaxTenuringThreshold
设置转入老生代的存活次数。如果是0,则直接跳过新生代进入老生代。
-XX:NewRatio
设置老生代和新生代的比值,例如该值为3,则表示新生代与老生代比值为1:3。
边栏推荐
猜你喜欢
LC interview question 02.07 Linked list intersection & lc142 Circular linked list II
Unity3d learning notes
剑指offer-高质量的代码
[noi simulation] regional division (conclusion, structure)
基于JS的迷宫小游戏
异步组件和Suspense(真实开发中)
Answer to the first stage of the assignment of "information security management and evaluation" of the higher vocational group of the 2018 Jiangsu Vocational College skills competition
毕业设计游戏商城
Tujia, muniao, meituan... Home stay summer war will start
Implementation of AVL tree
随机推荐
请问 flinksql对接cdc时 如何实现计算某个字段update前后的差异 ?
品牌·咨询标准化
使用TCP/IP四层模型进行网络传输的基本流程
Implementation of AVL tree
Answer to the second stage of the assignment of "information security management and evaluation" of the higher vocational group of the 2018 Jiangsu Vocational College skills competition
Basic process of network transmission using tcp/ip four layer model
This article introduces you to the characteristics, purposes and basic function examples of static routing
. Net 5 fluentftp connection FTP failure problem: this operation is only allowed using a successfully authenticated context
SolidWorks GB Library (steel profile library, including aluminum profile, aluminum tube and other structures) installation and use tutorial (generating aluminum profile as an example)
多线程与高并发(9)——AQS其他同步组件(Semaphore、ReentrantReadWriteLock、Exchanger)
什么情况下考虑分库分表
impdp的transform参数的测试
Esxi attaching mobile (Mechanical) hard disk detailed tutorial
MySQL user permissions
【NOI模拟赛】区域划分(结论,构造)
libcurl返回curlcode说明
如何给目标机器人建模并仿真【数学/控制意义】
Unity3d learning notes
带你刷(牛客网)C语言百题(第一天)
$refs:组件中获取元素对象或者子组件实例: