这不是我第一次从我的托管中收到太多的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)
原则上,在Unixish系统(Linux,BSD等)上,您可以使用该proc_nice()函数来更改进程优先级,如下所示:
proc_nice( 20 ); // now this process has very low priority
Run Code Online (Sandbox Code Playgroud)
但是,这里有一些主要的注意事项使它在实践中不那么有用:
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.
| 归档时间: |
|
| 查看次数: |
5803 次 |
| 最近记录: |