内存溢出问题的解决方案
2017-10-20 22:57
267 查看
内存溢出: out of memory 是指程序运行实际所需要的内存超出了系统能够分配给它的最大内存时,就会导致out of memory。
比如,PHP脚本默认申请的最大内存是128M,如果脚本执行过程中实际需要的内存超过了128M,就会导致内存溢出。
内存泄露: memory leak 是指程序中已动态分配的内存,由于某种原因程序未及时释放或无法释放,从而造成内存的浪费。
一次内存泄露的危害可以忽略,但内存泄露堆积的后果很严重,无论多大内存,迟早会被用尽。内存泄漏最终可能导致内存溢出。
数据统计时,如果一次性查询出所有的数据,数据量太大,就可能导致内存溢出。
解决方案有两种:
修改PHP脚本可用内存的大小
对数据进行分批处理,并及时销毁(unset)用过的变量
另外,为了节省PHP脚本对内存的损耗,应尽可能减少静态变量的使用,在需要数据重用时,可以考虑使用引用(&)。
如果一个变量被其他变量引用,unset销毁变量时,应该将该变量及其相关的引用变量也销毁。
比如,PHP脚本默认申请的最大内存是128M,如果脚本执行过程中实际需要的内存超过了128M,就会导致内存溢出。
内存泄露: memory leak 是指程序中已动态分配的内存,由于某种原因程序未及时释放或无法释放,从而造成内存的浪费。
一次内存泄露的危害可以忽略,但内存泄露堆积的后果很严重,无论多大内存,迟早会被用尽。内存泄漏最终可能导致内存溢出。
数据统计时,如果一次性查询出所有的数据,数据量太大,就可能导致内存溢出。
解决方案有两种:
修改PHP脚本可用内存的大小
// 临时设置php可以使用的内存大小为512M,在safe_mode(安全模式)下,ini_set无效 ini_set('memory_limit', '512M');
对数据进行分批处理,并及时销毁(unset)用过的变量
另外,为了节省PHP脚本对内存的损耗,应尽可能减少静态变量的使用,在需要数据重用时,可以考虑使用引用(&)。
如果一个变量被其他变量引用,unset销毁变量时,应该将该变量及其相关的引用变量也销毁。
相关文章推荐
- 关于一个CS项目,jvm内存溢出问题的解决方案
- 关于tomcat7内存溢出问题解决方案:ava.lang.OutOfMemoryError: PermGen space
- 数据库查询压力大、web端容易内存溢出——解决方案、问题总结
- Android用WebView加载flash大文件偶然会出现内存溢出以及蓝色打问号小方块问题的解决方案
- 飞信内存占用过大问题的临时解决方案
- mavan下scala编译中文乱码的问题.以及内存溢出问题解决
- android 内存溢出问题
- Android图片的内存溢出问题
- java 程序内存溢出问题查找
- 内存溢出问题java.lang.OutOfMemoryError: PermGen space
- Android加载大图片内存溢出的问题总结
- 新浪API, 利用get_uid获取是uid的数据溢出问题解决方案
- Android有效解决加载大图片时内存溢出的问题
- Android有效解决加载大图片时内存溢出的问题
- 如何检查和解决Java虚拟机内存溢出的问题?
- Android有效解决加载大图片时内存溢出的问题
- Android调用系统相机拍照像素太低以及内存溢出问题
- 使用grub的memmap的预留内存时系统死机问题的一个解决方案
- Java内存溢出相关问题
- [转]Android有效解决加载大图片时内存溢出的问题