内存不足、内存溢出的原因和解决方法?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存不足、内存溢出的原因和解决方法?相关的知识,希望对你有一定的参考价值。
如果你的系统虚拟内存太低,可以鼠标右击“我的电脑”选择“属性→高级→性能下设置→高级→打开虚拟内存设置”,可以重新设置最大值和最小值,按物理内存的1.5~2倍来添加数值,也可以更改虚拟内存的存放位置,可以设置放到其他容量较大的硬盘分区,让系统虚拟内存有充分的空间,让系统运行更快。虚拟内存太低有三种解决办法:
1. 自定义的虚拟内容的容量(系统默认是自动)太小,可以重新划分大小。
2. 系统所在的盘(一般是C盘)空余的容量太小而运行的程序却很大,并且虚拟内存通常被默认创建在系统盘目录下,我们通常可以删除一些不用的程序,并把文档图片以及下载的资料等有用文件移动到其他盘中,并清理“回收站”,使系统盘保持1GB以上的空间,或者将虚拟内存定义到其他空余空间多的盘符下。
3. 系统盘空余的容量并不小,但因为经常安装、下载软件,并反复删除造成文件碎片太多,也是容易造成虚拟内存不足的原因之一,虚拟内存需要一片连续的空间,尽管磁盘空余容量大,但没有连续的空间,也无法建立虚拟内存区。可以用磁盘工具整理碎片。
虚拟内存不足的九大原因及解决方法系统提示“内存不足”的九大原因及解决方法
一、剪贴板占用了太多的内存
实际上,剪贴板是内存中的一块临时区域,当你在程序中使用了“复制”或“剪切”命令后,Windows将把复制或剪切的内容及其格式等信息暂时存储在剪贴板上,以供“粘贴”使用。如果当前剪贴板中存放的是一幅图画,则剪贴板就占用了不少的内存。这时,请按下述步骤清除剪贴板中的内容,释放其占用的内存资源: 1.单击“开始”,指向“程序”或“所有程序”,指向“附件”,指向“系统工具”,然后单击“剪贴板查看程序”,打开“剪贴板查看程序”窗口。2.在“编辑”菜单上,单击“删除”命令。3.关闭“剪贴板查看程序”窗口。
为了与Microsoft Office程序提供的多重剪贴板相区分,上述所说的剪贴板,常被我们称为系统剪贴板。如果你正在使用Micros OftOffice程序,而且使用了其多重剪贴板功能,那么你应清空“Office剪贴板”上的项目,方法是:在“Office剪贴板”任务窗格(OfficeXP)或工具栏(Office2000)上,单击“全部清空”或“清空‘剪贴板’”。当清空“Office剪贴板”时,系统剪贴板也将同时被清空
二、打开的程序太多
如果同时打开的文档过多或者运行的程序过多,就没有足够的内存运行其他程序。这时,对于多文档界面(MDl)程序,如Word、Excel等,请关闭当前文档外的所有文档,并退出当前未使用的程序,然后或许你就能够继续执行因“内存不足”而被中断的任务。
三、重新启动计算机
如果只退出程序,并不重新启动计算机,程序可能无法将内存资源归还给系统。请重新启动计算机以释放系统资源,然后再次运行程序或执行被中断的任务。
四、自动运行的程序太多
如果在启动Windows时自动运行的程序太多,那么,即使重新启动计算机,也没足够的内存用来运行其它程序。
(一)确定设置为自动运行的程序是否太多
1.单击“开始”,然后单击“运行”。
2.在“打开”框中,键入“Msconfig”,单击“确定”按钮,打开“系统配置实用程序”窗口。
3.单击“常规”选项卡,选中“选择性启动”复选钮,清除“处理Win.ini文件”复选框和“加载启动组项目”复选框。
4.单击“确定”按钮,当系统提示重新启动计算机时,请单击“是”按钮。
重新启动电脑后,如果内存不足的问题已经解决,你就可以将计算机配置为启动时不打开任何程序。
(二)配置计算机不自动打开任何程序
1.恢复在Msconfig中所作的更改,方法是:在“系统配置实用程序”窗口,单击“常规”选项卡,选择“正常启动”,单击“确定”按钮,然后重新启动计算机。
2.删除“启动”文件夹中的所有快捷方式
①单击“开始”,指向“设置”,然后单击“任务栏和开始菜单”,系统弹出“任务栏属性”对话框。
②单击“开始菜单”选项卡,单击“自定义”,再单击“删除”按钮。
③单击“启动”文件夹旁的加号,以显示设置为自动运行的程序列表。如果“启动”文件夹旁没有加号“+”,则表明没有设置为自动运行的程序,请单击“关闭”按钮以终止此过程。
④单击“启动”文件夹中的每个快捷方式,然后单击“删除”按钮。此操作将从“开始”菜单中删除快捷方式,但并不从硬盘中删除相应的程序。对于“启动”文件夹中的每个快捷方式,重复该步骤。
⑤单击“关闭”按钮。
⑥单击“确定”按钮。
3.禁用从Win.ini文件加载的所有程序
①如上所述打开“系统配置实用程序”窗口。
②单击“Win.ini”选项卡,双击“[windows]”,然后清除“Load=”和“Run=”复选框。
③单击“确定”按钮,当系统提示重新启动计算机时,请单击“是”按钮。
五、让Windows管理虚拟内存设置
如果没有设置让Windows管理虚拟内存或者禁用虚拟内存,那么计算机可能无法正常工作,也可能收到“内存不足”的消息,或在运行某程序时出现相同的错误消息。
1.单击“开始”,单击“设置”,单击“控制面板”,然后双击“系统”。
2.在“系统属性”对话框中,单击“性能”选项卡,然后单击“虚拟内存”按钮。
3.选中“让Windows管理虚拟内存设置—(推荐)”选项,将计算机中可作为虚拟内存使用的硬盘空间量设置为默认值。此时,虚拟内存分页“win386.swp”能够根据实际内存的使用情况动态缩小和放大,最小容量为0,最大容量为硬盘的全部可用空间。
4.单击“确定”按钮。
六、增加可用磁盘空间
由于Windows以虚拟内存分页文件的格式使用硬盘空间以模拟RAM(),所以,尽管已设置为让Windows管理虚拟内存,但是当虚拟内存分页文件所在的驱动器(默认为Windows系统所在的硬盘分区)没有足够的空间时,仍会出现“内存不足”的错误。此时,请执行以下一项或多项操作,增加Windows虚拟内存分页文件所在驱动器上的可用空间:
1.清空回收站,方法是:在桌面上,右键单击“回收站”,再单击“清空回收站”。 2.从磁盘中删除临时文件,方法是:打开“Windows资源管理器”或“我的电脑”窗口,右键单击要释放其空间的磁盘,然后单击“属性”,在“常规”选项卡上,单击“磁盘清理”按钮,选中要删除的不需要的文件前的复选框(如图3),可以阅读列表下面区域中每个文件类型的说明,单击“确定”按钮。
3.从磁盘中删除过期的文件或已存档的文件。
4.删除从未使用过的所有文件。
七、程序文件被毁坏
如果仅仅是使用某个程序时,系统提示内存不足,而其他程序可以正常运行,那么可能的原因是该程序文件被毁坏,从而导致内存问题。然而Windows并没有确切地提示表明该程序已损坏,所以请尝试删除并重新安装该程序,然后重新运行该程序。如果系统不再提示内存不足,那么说明原程序文件确实被损坏。
八、使用内存优化软件
内存优化软件有很多,比如RAM Idle和Memo Kit就是比较出色的两个。这些软件都可以设置自动清空剪贴板、释放被关闭程序未释放的内存、对Win386.swp文件进行重新组织等,从而免除你手工操作的麻烦,达到自动释放内存的目的,不妨一试!
九、查杀病毒
系统感染电脑病毒也是导致内存不足的罪魁祸首,当系统出现“内存不足”的错误时,请使用最新的防毒软件查杀病毒,或者在清除电脑病毒之后,就解决了“内存不足”的问题。 参考技术A 引起内存不足、内存溢出的 原因 有很多种,常见的有以下几种:
1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
3.代码中存在死循环或循环产生过多重复的对象实体;
4.使用的第三方软件中的BUG;
5.启动参数内存值设定的过小;
内存溢出的解决方案 :
第一步 ,修改JVM启动参数,直接增加内存。(-Xms,-Xmx参数一定不要忘记加。)
第二步 ,检查错误日志,查看“OutOfMemory”错误前是否有其它异常或错误。
第三步 ,对代码进行走查和分析,找出可能发生内存溢出的位置。
重点排查以下几点:
1.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
2.检查代码中是否有死循环或递归调用。
3.检查是否有大循环重复产生新对象实体。
4.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
5.检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。
第四步 ,使用内存查看工具动态查看内存使用情况。 参考技术B 你可以将虚拟内存调大一点 参考技术C 相晴点击进入
相晴点击进入
相晴点击进入
投我以木瓜,报之以琼琚。匪报也,永以为好也!
投我以木桃,报之以琼瑶。匪报也,永以为好也!
投我以木李,报之以琼玖。匪报也,永以为好也!
Gsd – 烟尘排放量 ,kg ;
B – 耗煤量,kg ;
A – 煤中灰份含量,%; 参考技术D 这个要看你机器配置了,给点具体提示是哪里内存不足?
JMeter内存溢出:java.lang.OutOfMemoryError: Java heap space解决方法(实测有效)
一、问题原因
用JMeter压测,有时候当模拟并发请求较大或者脚本运行时间较长时,JMeter会停止,报OOM(内存溢出)错误。
原因是JMeter是一个纯Java开发的工具,内存由java虚拟机JVM管理,当内存回收不及时,堆内存不足时,就会报内存溢错误。
概念补充:
内存泄露:应用使用资源之后没有及时释放,导致应用内存中持有了不需要的资源。
内存溢出:应用的内存已经不能满足正常使用了,堆栈已经达到系统设置的最大值,进而导致崩溃。
通常都是由于内存泄露导致堆栈内存不断增大,从而引发内存溢出。
对JMeter而言也是如此,JMeter测试过程中,如果内存溢出的话,一般会出现上图中的提示:java.lang.OutOfMemoryError: Java heap space:意思就是堆内存溢出,不够用了
二、解决方法
知道了报错出现的原因是因为堆内存大小不足引起的,自然而然就会想到内存溢出的解决方法:调整堆内存大小。
步骤(以Windows系统为例,Linux系统类似):
1、打开jmeter.bat文件,按关键字“HEAP”搜索,把原来的配置改为如下:
修改前:
if not defined HEAP (
rem See the unix startup file for the rationale of the following parameters,
rem including some tuning recommendations
set HEAP=-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m
)
修改后:
if not defined HEAP (
rem See the unix startup file for the rationale of the following parameters,
rem including some tuning recommendations
set HEAP=-Xms512m -Xmx4000m
set NEW=-XX:NewSize=256m -XX:MaxNewSize=512m
)
set HEAP=-Xms512m -Xmx4000m:调整堆内存的大小
set NEW=-XX:NewSize=256m -XX:MaxNewSize=512m:调整堆内存中新生带的大小
注意:
这个值不是越大越好,要根据压测使用的机器而定,一般而言,堆内存的最大值不要超过物理内存的一半,否则容易导致jmeter运行变慢、
卡顿甚至内存溢出(因为java本身的垃圾回收机制是动态分配内存,调整的时候其本身会占用很多内存),NEW分配的内存,不宜太大。
2、修改完成后保存,重启JMeter,即可生效。
三、小结
1、这种修改堆大小的方法只适用一部分情况,并不是万能的,当需要模拟的线程数较大时,就需要根据具体情况采用分布式压测的方式了。
2、命令行运行JMeter时,一定要禁用“查看结果树”、“聚合报告”等监听器,因为真的真的真的很消耗内存。
以上是关于内存不足、内存溢出的原因和解决方法?的主要内容,如果未能解决你的问题,请参考以下文章
JMeter内存溢出:java.lang.OutOfMemoryError: Java heap space解决方法(实测有效)