运行 大量 PHP 后台脚本

Running heavy PHP scripts in background

我想在 Linux 上同时在后台 运行 超过 800 个 PHP 脚本。每个 PHP 脚本将永远执行,这意味着它一旦启动就不会停止。每个脚本都会发送请求并从服务器获得响应。我需要多少内存?是否可以 运行 超过 800 个脚本?我需要什么样的硬件?

要计算出您需要多少 ram 很简单,在执行期间将有多少数据存储在内存中 x 800。

您可以通过在处理完数据后立即将变量设置为 null 来提高内存使用率,即使您再次重新使用这些变量我也强烈推荐这样做。这样执行就不会变成内存泄漏填满 RAM 并导致服务器崩溃。

$myVariable = null; //clears memory

你的问题的第二部分 "execute forever" 也很简单,你只需要告诉 PHP 允许脚本 运行 很长一段时间......虽然我个人将执行以下操作:

  1. 每 1 小时 运行 设置 800 个脚本 crons。
  2. 我假设你的脚本处于无限循环中...注意无限循环之前的时间到变量中,并在循环中检查是否已经过去 1 小时,如果已经过去 1 小时,则结束循环和进程(一个新的将取代它)。

执行上述操作将确保每小时清理一次进程,如果出于某种原因某个进程由于资源或安全检查而被服务器终止,该进程将 spring 在一小时内备份。

当然,您可以将此时间降低到 30 分钟、15 分钟、5 分钟,具体取决于每个循环的繁重程度以及您希望重新建立流程的频率。

嗯,我确定你要找的硬件存在,但你需要一台时间机器才能访问它...你有时间机器吗??

我假设您无法访问或计划构建时间机器,并说这是不明智的。

万一幽默对你没用;没有能够同时执行那么多进程的硬件,着手创建一个需要比任何常用硬件可以执行的线程更多线程的架构显然是一个坏主意。

如果您所做的只是I/O,那么您应该使用非阻塞、异步I/O。

你可能做错了。由于您的脚本是 I/O 绑定而不是 CPU 绑定,事件循环将为您提供帮助。这样一来,您只需要 CPU 个核心数量的工人。

这种方法不仅减少了您在内存和 CPU 周期方面所需的资源,而且还减少了您必须监视的脚本数量。

有多种 PHP 实现,这里是三个最流行的实现: