2015-10-10 33 views
0

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

+0

所有PHP的首先是没有很好的解决方案做那种东西的。你可以考虑使用一些Perl或Python。为什么你需要一次800?你可以循环执行一个 – pr0metheus

+3

是的,有可能做到这一点。不,不可能告诉你需要多少MB或RAM,或者需要哪种硬件。 [是的,这味道像一个XY问题。](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – PeeHaa

回答

1

你可能做错了。由于您的脚本是I/O绑定而不是CPU绑定的,因此事件循环将对您有所帮助。这样你只需要和CPU核心一样多的工人。

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

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

+0

感谢您的快速回复。我不知道这将是一个I/O绑定?因为我打算使用套接字操作。 I/O和CPU有什么区别? –

+0

@JohnMcLow:如果你进行套接字操作,大部分时间将花在等待I/O(I/O绑定)上,而不是在CPU上计算(CPU绑定)。 – kelunik

-3

找出你多少RAM需要的是简单的,有多少数据在执行过程中会被存储在内存中X 800

您可以通过设置变量提高了内存使用,只要你与完成空数据,即使你再次使用变量,我会强烈推荐这个。这种方式执行不会变成填充内存和崩溃服务器的内存泄漏。

$myVariable = null; //clears memory 

你问题的第二部分“执行永远”也很简单,你只需要告诉PHP允许脚本很长一段时间运行...虽然我个人做到以下几点:

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

通过执行上述操作可以确保每小时清理一次进程,同样,如果由于资源或安全检查而导致进程被服务器杀死,进程将在一小时内恢复运行。

当然,您可以将此降至30分钟,15分钟,5分钟,具体取决于每个循环的重量以及您希望重新建立过程的频率。

0

嗯,我确定你找的硬件存在,但你需要一个时间机器来访问它......你有没有时间机器?

我打算假设您没有访问权限,或者计划构建时间机器,并且说这是不明智的。

如果幽默没有为你做;没有任何硬件能够同时执行多个进程,因此创建一个需要更多线程的体系结构比任何常用硬件都能执行的体系结构显然是一个坏主意。

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

+0

谢谢先生。我将为每个脚本执行与套接字相关的操作。我应该用什么来执行这种操作? –