php内存溢出问题,求教大神!

发布网友 发布时间:2022-04-06 03:28

我来回答

2个回答

热心网友 时间:2022-04-06 04:58

你看看你的程序里面有没有用到递归,或者有没有死循环。
另外解决此类问题的主要思想就是分而治之

我觉得是foreach的机制的问题
foreach($arr as $key=>$value){}这里面的$value是每次循环是把数组中元素的值赋值给$value
而foreach($arr as $key=>&$value){}这里的$value是引用赋值。
两者有什么区别呢?带引用的$value可以$value='aaa';直接改变元素的值;还有一个重要的,就是最后一次循环之后$value的值还会保留;
你这里是foreach($obj as $value){}对象默认是引用传值;所以循环过后要unset($obj);

php里还有一个函数clearstatcache(true)清楚文件状态缓存,虽然受影响的函数没有simplexml_load_file(),不过还是可以试试;

还有mysql系列的函数很多也不是很稳定,有时候不知道会出什么问题;建议用PDO;

深感php里面的坑太多了,稍不注意就跳进去了。追问用 t.php?file_id=1000 这种用$_get跑一千个刷新一下
echo "location.href='t.php?file_id=$file_id';";

为什么这样也没有用?不是页面刷新了一下嘛?页面刷新不会重置memory嘛?

追答页面刷新php脚本所占用的内存肯定会释放,你可以试着改进以下.用header('refresh:3;url=t.php?file_id='.$file_id
);减轻服务器的压力;另外可以把每次的次数改小;
如果这样不可以;肯定是程序本身的问题;
其实我总觉得你那个是本身的程序的问题;unset()函数是立马释放内存;
如果可以我帮你看下你的源码;

热心网友 时间:2022-04-06 06:16

内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

内存泄漏缺陷具有隐蔽性、积累性的特征,比其他内存非法访问错误更难检测。因为内存泄漏的产生原因是内存块未被释放,属于遗漏型缺陷而不是过错型缺陷。此外,内存泄漏通常不会直接产生可观察的错误症状,而是逐渐积累,降低系统整体性能,极端的情况下可能使系统崩溃。

Valgrind 是一个用于构建动态分析工具的工具框架。它提供了一组工具,每个工具都执行某种调试、分析或类似的任务,以帮助您改进程序。Valgrind 的体系结构是模块化的,因此可以轻松地创建新工具,而不会影响现有的结构。

标配了许多有用的工具:

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com