【问题标题】:Possible to optimize Php script to limit impact on server memory and cpu?可以优化 PHP 脚本以限制对服务器内存和 cpu 的影响吗?
【发布时间】:2011-11-06 21:36:47
【问题描述】:

我有一个 PHP 脚本通过 cronjob 在我的服务器上运行。作业每分钟运行一次。在 php 脚本中,我有一个循环执行,然后等待一秒并再次循环。本质上是创建一个每秒运行一次的脚本。

现在我想知道,如果我让 cronjob 每小时只运行一次,并且脚本仍然循环一小时或可能一整天.. 这会对服务器 cpu 和/或内存有任何影响吗?那么,它是正面的还是负面的?

【问题讨论】:

  • 我希望同时有几个对 CPU 有积极影响的 cron 作业!如果你能创造它,你就会变得富有! ;-D
  • 哈哈哈我实际上提出了一个执行频率较低的cronjob,以节省资源。
  • 循环是否在 1 分钟后结束?为什么不让 cron 作业每秒运行一次,并且脚本中没有循环?真的需要有一个每秒运行的 cron 作业吗?这个 cron 任务是做什么的?
  • 是的,让脚本每秒运行一次是绝对必要的。我的虚拟主机不支持每秒执行的 cronjobs。最多一分钟一次。

标签: php memory cron cpu


【解决方案1】:

我发现了一个设计缺陷。

您始终可以让 PHP 脚本在循环中永久运行,执行您需要的任何功能,而无需依赖网络服务器或客户端。

你显然是在用这个脚本检查一些东西,有什么煽动性的吗?可能有更好的解决方案适合您。例如,如果是数据库,请考虑 SQL 触发器。

【讨论】:

  • 请启发我:)!如何在不依赖服务器/客户端的情况下永久运行 PHP 脚本?这不会占用大量资源吗?
  • 抱歉,忘记添加了。这是一个脚本,用于检查数据库 (MySQL) 的更新并在必要时插入记录。我想它的技术可以与拍卖脚本相媲美。
【解决方案2】:

在我看来,这会产生负面影响。因为脚本一直在使用资源。 cron 在服务器上已经运行的基于时间的范围内调用。 但是cronjob每分钟最多只能运行一次。

另一件事是,如果脚本超时、失败、崩溃,无论出于何种原因,您最终最多不会运行脚本一小时。会对服务器负载产生积极影响,但我猜不是您要寻找的东西? :)

也许每 2 分钟甚至 5 分钟运行一次以节省服务器负载?

或者可能更改脚本,使其不等待,而只执行一次并从 cron 作业中调用它。应该对服务器负载产生积极影响。

【讨论】:

  • 这带来了另一个问题,有什么建议可以检查脚本是否正在运行?脚本每秒运行一次是绝对必要的。
  • 在这种情况下,我认为最好的办法是创建一个在调用您的 php 文件的服务器上运行的脚本。 cronjob 每秒运行的次数不会超过一次。假设您有可能创建这样的脚本。阅读更新我建议创建一个 sql 触发器,请参阅 stackoverflow.com/questions/1467369/… 这将有助于服务器负载。
【解决方案3】:

如果可能的话,我认为你应该更改脚本逻辑。

如果您的脚本执行的任务不是周期性的而是由某些事件触发的,您可以使用一些消息队列(如Gearman)。

否则你的解决方案是好的。可能会发生内存泄漏,但在新的 PHP 版本 (5.3.x) 中,垃圾收集器非常好。一些扩展可能会导致内存泄漏。或者你的应用程序设计会导致大量的内存使用(比如 Doctrine ORM 加载的对象缓存)。 但是您可以通过monit 等工具控制脚本内存使用情况,并在内存限制达到某个点时重新启动脚本,或者在脚本意外关闭时重新启动脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 2015-04-14
    • 2013-06-16
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2016-07-02
    相关资源
    最近更新 更多