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

标签 php apache email cron newsletter

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

我最近了解了 PHP 函数 ignore_user_abort(),它允许脚本继续运行,即使用户关闭了页面。我正在考虑将它用于我的电子邮件通讯工具而不是 Cron 作业,因为配置 Cron 作业有很多缺陷。让用户停留在页面上、使用 AJAX 请求以及在页面内容交付后运行部分脚本的替代方法也存在问题。

我的解决方案是在脚本的开头运行 call ignore_user_abort(true),并在生成内容后的末尾调用 flush() 以取得良好效果,然后运行时事通讯脚本。或者,使用 AJAX 执行此操作。

首先,有人发现这种方法有问题吗?

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

第三,因为如果我要发送大量电子邮件,比如每次运行 1000 封,我不想让我的邮件服务器重载。在我的 cron 作业中,我每 5 分钟运行一次脚本,发送一批 50 封电子邮件。如果我单次执行此操作,我可以发送 50 封电子邮件,让 sleep 暂停 5 分钟,然后继续发送另外 50 封电子邮件吗?如果是这样,在 sleep 期间脚本内存使用情况如何?这是一种有效的方法吗?

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

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

最佳答案

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

注意事项:

  • IIRC,PHP 有一个基于计数器的垃圾 集电极。这意味着,不同于 Java,两个对象各自引用 其他的即使不存在也会留在内存中 可由您的程序访问。你需要 小心这一点,当你 “放弃”您的元素。
  • 网络服务器 通常有杀死机制 长时间运行的脚本。这可能会失败 你在这里的目的——特别是如果 服务器的配置不能 调整。

关于 sleep 和循环期间的 PHP 内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5372298/

相关文章:

php - 我的 htaccess 正确吗?

PHPMailer 发送消息,但将 CLIENT/SERVER 对话框返回给浏览器

email - Sendgrid Web API -- 在 reply_to 字段中设置多个用户

javascript - 此联系表单代码有什么问题?

php - 以编程方式跳过默认 CCK 表单验证

apache - 向 .htaccess 添加注释

apache - Mod Security - 正文请求长度太长?

android - 无法将内部存储中的文件添加为电子邮件附件

php - 使用sql查询和模型codeigniter将数据复制到另一个表

php insert语句未在mysql中插入数据