当前位置:网站首页>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。
边栏推荐
猜你喜欢
.net core 访问不常见的静态文件类型(MIME 类型)
关于数据库数据转移的问题,求各位解答下
MATLAB小技巧(30)非线性拟合 lsqcurefit
如何给目标机器人建模并仿真【数学/控制意义】
大促过后,销量与流量兼具,是否真的高枕无忧?
Network foundation - header, encapsulation and unpacking
Basic introduction of JWT
Four goals for the construction of intelligent safety risk management and control platform for hazardous chemical enterprises in Chemical Industry Park
Basic process of network transmission using tcp/ip four layer model
Bus message bus
随机推荐
Under what circumstances should we consider sub database and sub table
MYSQL binlog相关命令
How does an enterprise manage data? Share the experience summary of four aspects of data governance
Composition API 前提
from .onnxruntime_pybind11_state import * # noqa ddddocr运行报错
Four goals for the construction of intelligent safety risk management and control platform for hazardous chemical enterprises in Chemical Industry Park
品牌·咨询标准化
freeswitch拨打分机号源代码跟踪
Take you to brush (niuke.com) C language hundred questions (the first day)
Anr principle and Practice
MySQL的主从复制原理
父组件传递给子组件:Props
MySQL view bin log and recover data
子组件传递给父组件
【mysqld】Can't create/write to file
Use of completable future
How can clothing stores make profits?
Network foundation - header, encapsulation and unpacking
CompletableFuture使用详解
服装门店如何盈利?