2

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

nice -n 19 php script.php

但这似乎没有任何区别。

4

5 回答 5

8

您可以通过代码分散 usleep ( int $micro_seconds )。这将迫使您的脚本停止一小段时间,让 CPU 腾出时间来做其他事情。

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

于 2008-12-19T19:09:20.517 回答
5

即使很好,它也会使用 100% 的 CPU(如果可用)。但是,内核将优先考虑出现的任何其他(非优先)进程。

于 2008-12-19T19:09:04.683 回答
4

只要系统响应迅速,并且您能够在它运行时完成其他工作,我就不会担心。我在我的系统上运行一个分布式计算客户端,它会占用所有可用的 CPU 周期。由于它以最低优先级运行,因此任何和所有其他进程都会根据需要抢占它。

于 2008-12-19T19:40:39.690 回答
1

由于您的进程是后台进程,并且使用 100% CPU,因此该进程似乎受 CPU 限制。它是后台,因此不会预期用户绑定,因此唯一的选择是 IO 绑定。如果您的进程不应该真正进行有趣的 IO,则脚本本身将受 CPU 限制,而不仅仅是错误。

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

于 2008-12-19T20:39:34.920 回答
1

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

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

于 2008-12-19T21:38:17.720 回答