当前位置:网站首页>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。
边栏推荐
- Take you to brush (niuke.com) C language hundred questions (the first day)
- toRefs API 与 toRef Api
- MySql用户权限
- 2018年江苏省职业院校技能大赛高职组“信息安全管理与评估”赛项任务书第一阶段答案
- 华为机试题素数伴侣
- 组件的通信
- Four goals for the construction of intelligent safety risk management and control platform for hazardous chemical enterprises in Chemical Industry Park
- mysql查看bin log 并恢复数据
- Get the city according to IP
- 大咖云集|NextArch基金会云开发Meetup来啦
猜你喜欢
场馆怎么做体育培训?
Please answer the questions about database data transfer
Lvs+kept (DR mode) learning notes
Brand · consultation standardization
Matlab tips (30) nonlinear fitting lsqcurefit
Basic process of network transmission using tcp/ip four layer model
2018 Jiangsu Vocational College skills competition vocational group "information security management and evaluation" competition assignment
品牌·咨询标准化
Unity3d learning notes
网络基础 —— 报头、封装和解包
随机推荐
MySql用户权限
选择商品属性弹框从底部弹出动画效果
DB2获取表信息异常:Caused by: com.ibm.db2.jcc.am.SqlException: [jcc][t4][1065][12306][4.25.13]
ANR 原理及实践
大促过后,销量与流量兼具,是否真的高枕无忧?
Learning records on July 4, 2022
RuntimeError: CUDA error: CUBLAS_ STATUS_ ALLOC_ Failed when calling `cublascreate (handle) `problem solving
分布式id解决方案
[Luogu p1971] rabbit and egg game (bipartite game)
品牌·咨询标准化
2018年江苏省职业院校技能大赛高职组“信息安全管理与评估”赛项任务书第一阶段答案
Please answer the questions about database data transfer
unity3d学习笔记
Anr principle and Practice
impdp的transform参数的测试
freeswitch拨打分机号源代码跟踪
MySQL user permissions
使用TCP/IP四层模型进行网络传输的基本流程
Use of completable future
JWT的基础介绍