如何让PHP更好用于CPU?

时间:2008-12-19 19:04:57

标签: php nice

我正在共享的* NIX服务器上运行(由Site5运行)。我有一个在后台运行的PHP脚本偶尔进行一些离线计算。它在运行时使用大约100%的CPU。我已经尝试过了,就像这样:

nice -n 19 php script.php

但这似乎没有任何区别。

5 个答案:

答案 0 :(得分:8)

您可以通过代码分散usleep(int $ micro_seconds)。这将迫使你的脚本在很短的时间内停止,让CPU自由地用于其他事情。

虽然这是必要的吗?如果你的脚本具有低优先级,那么它使用100%的CPU是否重要...如果需要具有更高优先级的其他进程,则CPU不会获得所需的时间,而脚本将获得其余的时间(最多100%)?

答案 1 :(得分:5)

如果可以的话,它会使用100%的CPU。但是,内核将优先考虑任何其他(非niced)进程。

答案 2 :(得分:4)

只要系统响应,并且您可以在运行时完成其他工作,我就不用担心了。我在我的系统上运行distributed computing client,它会吸收任何可用的CPU周期。由于它以最低优先级运行,因此任何和所有其他进程都将根据需要抢占它。

答案 3 :(得分:1)

由于您的进程是后台进程,并且使用100%CPU,因此该进程似乎是cpu绑定的。它是后台,因此不会期望用户绑定,因此唯一的替代方案是IO绑定。如果您的进程不应该真正做有趣的IO,那么脚本本身应该是CPU绑定的,而不仅仅是错误的。

流程总是尽可能快地进行。如果它们是IO绑定的,它们将使用100%IO,如果它们是CPU绑定的,它们将尝试使用100%CPU。正确编写的流程调度程序自动旨在为所有流程提供公平感,这意味着更大的流程优先级更低。你可以用nice来进一步降低优先级。 cpu使用率仍然约为100%的事实意味着没有其他进程当前受CPU限制,但很可能等待来自网络的输入。

答案 4 :(得分:1)

如果上下文切换有相当多的进程,而不是多少,那么很好地改变你的php导致100%CPU的频率。

程序执行系统调用的那一刻,内核可以在执行实际工作之前将CPU输出到另一个进程。你的php在全速运行时似乎没有进行任何系统调用。也就是说,你没有进行任何阻塞I / O(套接字,文件等)。看看是否有任何代码块在繁忙等待中被卡住。