这不是我第一次从主机收到过多的 CPU 负载警告。该代码只是一些带有 mysql 查询的随机 php 脚本,没什么特别的。(表格没什么特别的,最多几百行,如果需要,我总是限制它们。
我不介意它运行 0.15 秒而不是 0.05 秒,那么有没有办法可以控制进程优先级或限制 cpu 负载?
谢谢!
原则上,在 Unixish 系统(Linux、BSD 等)上,您可以使用该proc_nice()
函数来更改进程优先级,如下所示:
proc_nice( 20 ); // now this process has very low priority
但是,这里有几个主要的警告使其在实践中不太有用:
proc_nice()
即使在技术上支持它的系统上,也可能出于安全原因被禁用。如果您的虚拟主机允许,您可以尝试做的是为长时间运行的任务启动一个后台进程,以便您的网络服务器可以在它运行时恢复为请求提供服务。您甚至可以使用nice
shell 命令降低后台进程的优先级,如下所示:
exec( "nice nohup php -f slow_script.php < /dev/null > output.txt 2>&1 &" );
慢速脚本完成后,您可以通过下载output.txt
.
除了 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');
资源