【问题标题】:Lots of long running cron jobs大量长期运行的 cron 作业
【发布时间】:2015-03-13 18:24:05
【问题描述】:

我现在有大约 35 个 cron 工作。它们中的大多数是抓取或进行一些计算的 PHP 脚本。这些脚本还循环超过 10-20 个不同的服务器来执行这些刮擦。 (他们是不同的国家,所以他们必须是单独的电话)。

所以我们有 30 个脚本,每个脚本都有一个超过 20 个服务器的循环,因此每个脚本运行大约需要 5-15 分钟。我现在把每个脚本都分开了。

但是,运行 80 个单独的脚本而不是 35 个循环并需要一段时间的脚本会更好吗?每个脚本可能需要 1-2 分钟而不是 10-15 分钟。

这当然会产生大量的 PHP 进程。一次运行 10-15 个或更多 PHP 进程是否有任何问题或限制?

我正在 Rackspace 上运行云服务器性能。

【问题讨论】:

    标签: php cron


    【解决方案1】:

    就个人而言,如果工作需要按特定顺序完成,我会尽可能使其线性化.....这可能需要更长的时间,但我总是犯错。数据准确性方面。

    【讨论】:

    • 是的,我的目标是准确,但脚本都是独立的,甚至是循环中的脚本。但是,每个长时间运行的循环都像一个黑洞,有时 1/20 会失败,而且很难追踪。
    【解决方案2】:

    视情况而定。

    如果您要创建更多同时运行的进程,您将增加总体内存占用。每个进程都将携带它自己的内存开销以供进程运行,并加载其进程所需的任何库。 (除了它需要做的任何事情)。您还将有两倍多的脚本来监控它们是否始终成功运行。

    但是,在创建更多进程时,您将能够加快我们的速度,因为您本质上是在创建多线程。允许一个进程继续,而另一个进程阻塞等待 i/o。

    如果每个脚本不依赖另一个脚本,将它们分成更小的脚本应该没问题。如果你能处理监控更多的脚本,并且服务器能处理,那我会做。

    如果脚本确实有依赖关系,或者如果您必须同时运行如此多的脚本,您的服务器使用率已达到最大值,请将它们放在一起。

    话虽如此,我也会尝试优化脚本,确保在不创建更多进程的情况下无法使脚本更快。

    【讨论】:

    • 据你所知,没有可以生成的 PHP 进程数量的 ini 配置?我在 nginx 后面运行 PHP5-fpm。脚本不相互依赖。他们确实会加载库。
    【解决方案3】:

    根据您设置服务器的方式,我会立即运行它们。此外,我还会在晚上运行它们,在不使用 Web 服务器的下班时间运行它们,而不是在业务运营期间运行它们,除非您的 Web 应用程序依赖它。如果你在 Rackspace 上的云服务器上,我不会担心带宽,尽管增加你的内存可能是一个问题。

    如果您有足够数量的内存,则无需担心生成更多 PHP 进程; linux端没有限制。

    a) Figure out which cron needs to run in which order
    b) Order the cron to be run at night, around mid-night
    c) Run and fireoff the 80 scripts at once 
    

    根据批处理而不是单个 cron 向您发送一封包含 cron 结果的电子邮件或报告这一切都成功完成也是一个好主意。

    【讨论】:

    • 据你所知,没有可以生成的 PHP 进程数量的 ini 配置?我在 nginx 后面运行 PHP5-fpm。
    • 它没有限制,在我的一台服务器中,有超过 80 个 httpd 进程在 aws ec2 (large.1) 上的升级云服务器上运行
    猜你喜欢
    • 1970-01-01
    • 2013-07-02
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    相关资源
    最近更新 更多