睡眠和循环期间的PHP内存使用情况

时间:2011-03-20 23:21:40

标签: php apache email cron newsletter

我有一些关于PHP内存使用的问题。我将自己进行一些测试,但获得各种建议非常有帮助。

我最近了解了PHP函数ignore_user_abort(),它允许脚本在用户关闭页面时继续运行。我正在考虑将此用于我的电子邮件新闻稿工具而不是Cron作业,因为配置Cron作业有各种各样的小问题。使用户停留在页面上,使用AJAX请求以及在页面内容交付后运行部分脚本的替代方法都存在问题。

我的解决方案是在脚本开头运行调用ignore_user_abort(true),在生成内容后的最后,调用flush()以获得良好的度量,然后运行新闻稿脚本。或者,使用AJAX执行此操作。

首先,有没有人看到这种方法的问题?

其次,如果我使用没有设置时间限制的脚本,并且每个电子邮件都有一个while循环,如果我一次性完成,那么内存使用情况会怎样?由于我会覆盖变量,而不是使用新变量,我认为它会很低。

第三,因为如果我发送大量电子邮件,比如每次运行1000次,我不想让我的邮件服务器超载。通过我的cron作业,我每5分钟运行一次脚本,发送一批50封电子邮件。如果我在一次通过中这样做,我可以发送50封电子邮件,打电话给睡觉说5分钟,然后继续另外50封电子邮件?如果是这样,脚本内存使用情况如何在睡眠期间?这会是一种有效的方法吗?

我真正想要做的是想出一种创建新闻稿工具的方法,该工具不需要设置Cron作业的复杂(非技术人员)任务(甚至不是共享主机上的选项),并且不要求用户将浏览器保持在单个页面上打开。

欢迎任何想法建议或反馈。谢谢!

1 个答案:

答案 0 :(得分:1)

在以前的工作中,我们为PHP中的一个关键功能编写了一个守护进程,不完全是你所描述的,但足够相似 - 当然还有循环和睡眠。我们非常怀疑它的长期稳定性 - 特别是在内存管理方面 - 所以我们对它进行了非常艰难的压力测试。结果非常好,代码投入生产并运行几个月甚至几年。

注意事项:

  • IIRC,PHP有一个基于反制的垃圾 集电极。这意味着,不像在 Java,两个对象引用每个 即使没有,其他人也会记忆犹新 您的程序可以访问。你需要 你这时要小心 '放弃'你的对象。
  • Web服务器 经常有杀人的机制 长期运行的脚本。这可能会失败 你在这里的目的 - 特别是如果 服务器的配置不能 调谐。