这不是我第一次从托管中收到太多的CPU加载警告。代码只是一些带有mysql查询的随机php脚本,没什么特别的。 (表格不是特别的,最多几百行,如果要求,我总是限制它们。
我不介意它运行0.15秒而不是0.05,所以有没有办法控制进程优先级或限制CPU负载?
谢谢!
答案 0 :(得分:11)
如果这是一个长时间运行的dameon或程序,请添加sleep()
/ usleep()
。 小睡眠会显着降低CPU使用率。
以下代码将消耗大量的cpu
while(...){
//do stuff
}
因为您没有为CPU提供空间来执行其他任务。将其更改为
while(...){
//do stuff
sleep(1);
}
这将大大降低您的CPU使用率。 1秒的CPU是很多时间来完成其他任务。
要睡觉额外的0.1
秒(0.15 - 0.05
),请使用usleep()。
usleep(100000);
答案 1 :(得分:6)
原则上,在Unixish系统(Linux,BSD等)上,您可以使用proc_nice()
函数来更改进程优先级,如下所示:
proc_nice( 20 ); // now this process has very low priority
然而,这里有一些主要的注意事项使它在实践中不那么有用:
proc_nice()
。如果您的虚拟主机允许,您可以尝试执行的操作是start a background process以执行长时间运行的任务,以便您的网络服务器可以在运行时返回到服务请求。您甚至可以使用nice
shell命令来降低后台进程的优先级,如下所示:
exec( "nice nohup php -f slow_script.php < /dev/null > output.txt 2>&1 &" );
慢速脚本完成后,您可以通过下载output.txt
来获取其输出。
答案 2 :(得分:0)
除了Ilmari Karonen的回答:
如果您想增加或减少当前流程的优点,请使用renice
和当前流程ID:
function custom_proc_nice($priority) {
exec("renice +$priority ".getmypid());
}
如果你想在PHP进程退出后阻止好处持续存在,你将需要一个关闭函数:
function exit_func(){
// Restore priority
proc_nice(0);
}
register_shutdown_function('exit_func');
<强>资源强>