這不是我第一次從我的主機得到太多的CPU負載警告。該代碼只是一些隨機的PHP腳本與MySQL查詢,沒有什麼奇特的。 (表格是沒有什麼特別的,最多有幾百行,我總是限制他們,如果要求。限制CPU負載或設置進程prority
我不介意如果它運行0.15秒而不是0.05,那麼有沒有辦法我可以控制進程優先級或極限CPU負載?
謝謝!
這不是我第一次從我的主機得到太多的CPU負載警告。該代碼只是一些隨機的PHP腳本與MySQL查詢,沒有什麼奇特的。 (表格是沒有什麼特別的,最多有幾百行,我總是限制他們,如果要求。限制CPU負載或設置進程prority
我不介意如果它運行0.15秒而不是0.05,那麼有沒有辦法我可以控制進程優先級或極限CPU負載?
謝謝!
原則,對Unixish系統(Linux操作系統,BSD等),你可以使用proc_nice()
功能改變進程的優先級,這樣的:
proc_nice(20); // now this process has very low priority
不過,也有一對夫婦這裏的主要注意事項使它在實踐中不那麼有用:
什麼,你可以嘗試這樣做,如果你的虛擬主機提供商允許的話,是start a background process對於長時間運行的任務,讓你的網絡服務器可以回去,而它的運行服務請求。你甚至可以使用nice
shell命令降低後臺進程的優先級,這樣的:
exec("nice nohup php -f slow_script.php </dev/null> output.txt 2>&1 &");
一旦慢劇本完成後,您可以通過下載output.txt
得到它的輸出。
除了ILMARI Karonen的回答是:
如果你想增加或減少當前進程的nice值連同當前進程ID使用renice
:如果你想防止
function custom_proc_nice($priority) {
exec("renice +$priority ".getmypid());
}
美好的事物堅持PHP進程退出後,你將需要一個關機功能:
function exit_func(){
// Restore priority
proc_nice(0);
}
register_shutdown_function('exit_func');
雷索urces
唉,除非您以PHP身份運行root用戶(這是非常不安全的,所以你真的不應該這樣做),[renice'也不能減少進程的好處。](http://linux.die.net/man/8/renice) –
很高興知道。感謝信息和反應Ilmari!是否將php進程的默認值設置爲0? – RafaSashi
非常感謝你,這是完美的答案! – molbal
一般來說,它不會減少使用量,因爲它會保持不變。但是,在腳本的整個持續時間內,將會實現從尖峯到100%CPU使用率的過程。它不會阻止應該更快執行的其他任務。 – Grzegorz