在Virmach从Colocrossing机房搬离两年后,Virmach再次迎来大变故,由于其上游DediPath倒闭Virmach不得不开始维护。...
2024-11-26 5
内存溢出和内存泄漏是什么,是怎么发生的的呢?内存溢出和内存泄漏它们的区别是什么?应该怎么做防护措施呢?小编接介绍一下吧。
内存溢出和内存泄漏有什么区别:
内存泄漏是由于使用不当,把一部分内存“丢掉了”,导致这部分内存不可用。
当在堆中创建了对象,后来没有使用这个对象了,又没有把整个对象的相关引用设为null。此时垃圾收集器会认为这个对象是需要的,就不会清理这部分内存。这就会导致这部分内存不可用。
所以内存泄漏会导致可用的内存减少,进而会导致内存溢出。
内存泄露问题排查方法:
step1:找出泄漏的对象
step2:找到泄漏对象的GC Root
step3:根据泄漏对象和GC Root找到导致内存泄漏的代码
step4:想法设法解除泄漏对象与GCRoot的连接
如果不存在泄漏:
看下是否能增大jvm堆的最大容量,优化程序,减小对象的生命周期
前期准备:
当发生堆溢出的时候,可以让程序在崩溃时产生一份堆内存快照
产生堆内存快照的方法:
给jvm加上参数XX:+HeapDumpOnOutofMemoryError,这样就会在程序崩溃的时候,产生一份堆内存快照
分析堆内存快照我建议用jdk自带的可视化监视工具visuAlVM,位置在jdk安装目录下的bin,如果是在Linux环境的话,可以把快照传到window。因为分析工具会占用很大的内存,不建议在服务端进行分析。
解决方法:
针对StaCKOverflowError:
1.首先栈溢出会输出异常信息,根据信息查看对应的方法调用是否出现无限调用、或者栈帧过大等代码逻辑上的问题,通过修改代码逻辑解决;
2.如果确确实实需要更大的栈容量,可以检查并调大栈容量:-Xss16m。
内存泄露的迹象:老年代每次垃圾回收的时候,总是不能全部回收,一次比一次占用的内存多。
针对OutOfMemoryError:
首先检查是否创建过多的线程,减少线程数
有了堆信息查看方面的功能,我们一般可以顺利解决以下问题:
--年老代年轻代大小划分是否合理
--内存泄漏
--垃圾回收算法设置是否合理
内存泄漏的现象:
常常地,程序内存泄漏的最初迹象发生在出错之后,在你的程序中得到一个OutOfMemoryError。
这种典型的情况发生在产品环境中,而在那里,你希望内存泄漏尽可能的少,调试的可能性也达到最小。
一个OutOfMemoryError常常是内存泄漏的一个标志,有可能应用程序的确用了太多的内存;这个时候,你既不能增加JVM的堆的数量,也不能改变你的程序而使得他减少内存使用。
但是,在大多数情况下,一个OutOfMemoryError是内存泄漏的标志。一个解决办法就是继续监听GC的活动,看看随时间的流逝,内存使用量是否会增加,如果有,程序中一定存在内存泄漏。
< div>
相关文章
在Virmach从Colocrossing机房搬离两年后,Virmach再次迎来大变故,由于其上游DediPath倒闭Virmach不得不开始维护。...
2024-11-26 5
Softbank到中国联通已经炸了有大半年了(最近电信也炸了),目前根据搬瓦工方面的消息,软银预计将在2024年2月完成修复。 Hello,...
2024-11-26 2
2023年3月29日起腾讯云将调整所有海外轻量应用服务器套餐配置和价格。 一、香港轻量应用服务器通用型实例将全面取消,低价香港轻量服务器将不复存...
2024-11-26 2
微林是一个为开发者而生的小众云服务平台,成立于2014年,特色是提供 vxTrans 流量优化服务(L4)、Pivot 超导中枢服务(Link/Frp...
2024-11-26 2
PS:继OneinStack一键包被投毒事件后,LNMP.ORG军哥的一键包也被投毒,如有使用该程序的站长和企业请立即排查是否中招。 事件公告...
2024-11-26 1
在 2022 年 NAB 展会流媒体峰会上,Google 宣布 (https://cloud.google.com/blog/products/net...
2024-11-26 1
根据主机资讯掌握的最新情报,DMIT 可能在下一代后台面板升级后提供VM快照和备份服务。 官方网站:www.dmit.io 由于PVE的设...
2024-11-26 1
3.5、5、10 刀 免费升级为了2核CPU,并且CPU型号由Intel(R Xeon(R CPU E5-2676 v3 @ 2.40GHz 调整...
2024-11-26 1