【发布时间】:2013-01-09 22:41:14
【问题描述】:
这不是我第一次从主机收到过多的 CPU 负载警告。该代码只是一些带有 mysql 查询的随机 php 脚本,没什么特别的。 (表格没什么特别的,最多几百行,如果需要,我总是限制它们。
我不介意它运行 0.15 秒而不是 0.05 秒,那么有没有办法可以控制进程优先级或限制 cpu 负载?
谢谢!
【问题讨论】:
这不是我第一次从主机收到过多的 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() 可能会被禁用,即使在技术上支持它的系统上也是如此。如果您的虚拟主机允许,您可以尝试将长时间运行的任务发送至start a background process,以便您的网络服务器可以在运行时恢复为请求提供服务。你甚至可以使用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');
资源
【讨论】:
renice cannot decrease the niceness of a process, either.