可以优化Php脚本,以限制对服务器内存和cpu的影响


Possible to optimize Php script to limit impact on server memory and cpu?

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

现在我想知道,如果我让cronjob每小时只运行一次,并且脚本仍然循环一整小时或可能一整天。这对服务器的cpu和内存有影响吗?如果有影响,是积极的还是消极的?

我发现了一个设计缺陷

你可以让一个PHP脚本永远在循环中运行,执行你需要的任何功能,而不依赖于web服务器或客户端。

你显然是检查的东西与这个脚本,任何煽动到什么?也许有更好的解决办法。例如,如果它是一个数据库,考虑SQL触发器。

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

另一件事是,如果脚本超时,失败,崩溃,不管什么原因,你最终没有运行脚本最多一个小时。会对服务器负载有积极的影响,但不是你想要的,我猜?:)

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

或者修改脚本,使其不再等待,而只执行一次,并从cron job调用它。

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

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

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