加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP:在循环中有一些内存问题

发布时间:2020-12-13 14:00:36 所属栏目:PHP教程 来源:网络整理
导读:我有一个类似于以下内容的代码段: while (true) { $myObject = new Class(); $myOtherObject = $myObject-getSomeOtherObj(); ... $myArray = [1,2,3]; ... sleep(1); //Sleep at the end,to save CPU.} 这个代码段应该作为一个守护进程运行,但是我做这个工
我有一个类似于以下内容的代码段:
while (true) {
    $myObject = new Class();
    $myOtherObject = $myObject->getSomeOtherObj();
    ...
    $myArray = [1,2,3];
    ...
    sleep(1); //Sleep at the end,to save CPU.
}

这个代码段应该作为一个守护进程运行,但是我做这个工作有很多麻烦.

问题:每次迭代增加进程内存使用量.仿佛在每个新的迭代中,一个新的$myObject被实例化,但是前面的一个保留在内存中,等等.

我努力了:

>在循环结束时(在sleep()之前)取消设置所有变量.
>将所有变量设置为null.
>将它们封装在一个单独的函数中(while(true){doThis();})
>手动调用gc_collect_cycles()

没有人会减少内存使用.

我不知道如何强制所有的内存被释放.

我正在编译我以前的评论.这不能准确解释您如何释放分配的内存,但会引导您通过一种方式来发现应用程序中导致的内容.有了这个,你可以努力优化你的代码.

查找内存使用瓶颈通常是一项具有挑战性的任务.您可以先查看I / O相关的电话,如数据库查询,文件访问或甚至网络.除了增加执行时间之外,有时这些操作可以分配一些内存.

如果您已经从I / O操作返回的资源清除内存,并且没有注意到分配的内存显着减少,那么下一步可能是使用Blackfire(https://blackfire.io/)这样的工具对应用程序进行分析.

Blackfire将为您详细介绍每个函数调用及其对内存,CPU和执行时间的统计.使用该数据可以检查哪些操作分配过多的内存.当您将鼠标指针放在通话详细信息中的内存条上时,您可以找到此信息,如下所示:http://i.imgur.com/762mWmF.png

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读