【发布时间】:2015-08-06 18:57:57
【问题描述】:
我有一个类似于以下内容的 sn-p:
while (true) {
$myObject = new Class();
$myOtherObject = $myObject->getSomeOtherObj();
...
$myArray = [1, 2, 3];
...
sleep(1); //Sleep at the end, to save CPU.
}
这个 sn-p 应该作为守护程序服务运行,但我在完成这项工作时遇到了很多麻烦。
问题:每次迭代都会增加进程内存使用量。好像在每次新的迭代中都会实例化一个新的$myObject,但前一个仍然分配在内存中,等等。
我试过了:
- 到
unset循环结束时的所有变量(就在sleep()之前)。 - 将所有变量设置为
null。 - 将它们封装在一个单独的函数中 (
while (true) { doThis(); }) - 手动拨打
gc_collect_cycles()
这些都不能减少内存使用。
我不知道如何强制释放所有内存。
【问题讨论】:
-
你到底要做什么,这好像是死循环了!
-
要避免无限循环
-
这是一个无限循环,因为这是一个守护服务。这将监听一些变化并且永远不应该退出。我真的需要解释守护服务的概念吗?
-
@zairwolf 你所说的基本上是“释放内存,退出程序然后重新启动它”。这是一个非答案,一个非常糟糕的解决方法,在我的规范中是不可能的。
标签: php memory garbage-collection