【发布时间】:2011-05-06 01:17:45
【问题描述】:
我在 php 中编写了一个守护程序,并希望确保它不会泄漏内存,因为它将 24/7 运行。
即使是守护进程的最简单形式 memory_get_peak_usage 也会报告脚本在每个周期消耗更多内存。另一方面,memory_get_usage 不会增长。
问题是:我应该担心吗?我已经将守护进程剥离到最基本的内容,但这仍在发生。有什么想法吗?
#!/usr/bin/php -q
<?php
require_once "System/Daemon.php";
System_Daemon::setOption("appName", "smsd");
System_Daemon::start();
while(!System_Daemon::isDying()){
System_Daemon::info("debug: memory_get_peak_usage: ".memory_get_peak_usage());
System_Daemon::info("debug: memory_get_usage: ".memory_get_usage());
System_Daemon::iterate(2);
}
最后说明 + 结论:我最终编写了自己的守护进程包装器,而不是使用 pear 的 system_daemon。不管我如何调整这个库,我都无法阻止它泄漏内存。希望这对其他人有帮助。
最后说明 + 结论 2:我的脚本已经投入生产了一个多星期,仍然没有泄漏 1 个字节的内存。所以 - 在 php 中编写一个守护进程实际上似乎是可以的,只要你非常小心它的内存消耗。
【问题讨论】:
-
分享你的守护进程包装会很棒;)
-
@Xeoncross 抱歉回复晚了。但是很好。它基本上只是一个无休止的while循环,在迭代之前会休眠一段时间。而已。只需确保为每次迭代记录 memory_get_peak_usage() 即可。这样您就可以查看是否有任何内存泄漏。
标签: php memory-leaks daemon