限制CPU负载或设置进程优先级

mol*_*bal 5 php

这不是我第一次从我的托管中收到太多的CPU加载警告.代码只是一些带有mysql查询的随机php脚本,没什么特别的.(表格不是特别的,最多几百行,如果要求,我总是限制它们.

我不介意它运行0.15秒而不是0.05,所以有没有办法控制进程优先级或限制CPU负载?

谢谢!

Shi*_*dim 11

如果这是一个长时间运行的dameon或程序add sleep()/ usleep().小睡眠会大大降低CPU使用率.

以下代码将消耗大量的cpu

while(...){
//do stuff
}
Run Code Online (Sandbox Code Playgroud)

因为你没有给CPU留出空间来完成其他任务.改为

while(...){
   //do stuff
    sleep(1);
}
Run Code Online (Sandbox Code Playgroud)

这将大大降低您的CPU使用率.1秒用于CPU是很多时间做其他任务.

要睡多了0.1秒(0.15 - 0.05)使用usleep().

usleep(100000);
Run Code Online (Sandbox Code Playgroud)


Ilm*_*nen 6

原则上,在Unixish系统(Linux,BSD等)上,您可以使用该proc_nice()函数来更改进程优先级,如下所示:

proc_nice( 20 );  // now this process has very low priority
Run Code Online (Sandbox Code Playgroud)

但是,这里有一些主要的注意事项使它在实践中不那么有用:

  • Windows不支持它.
  • 你只能提高它的好感,而不是减少它(甚至不能恢复原来的值).
  • 在PHP进程退出之前,这种好处仍然存在,如果您将PHP作为FastCGI进程运行,或者更糟糕的是,作为Web服务器扩展,这可能是一个问题.
  • 由于上述问题,proc_nice()即使在技术上可以支持它的系统上,也可能出于安全原因而被禁用.

如果您的webhost允许,您可以尝试做的是为长时间运行的任务启动后台进程,以便您的Web服务器可以在运行时返回到服务请求.您甚至可以使用niceshell命令来降低后台进程的优先级,如下所示:

exec( "nice nohup php -f slow_script.php < /dev/null > output.txt 2>&1 &" );
Run Code Online (Sandbox Code Playgroud)

慢速脚本完成后,您可以通过下载获得其输出output.txt.