引言: linux內核是一個了不起的馬戲表演者,它在進程和系統資源之間小心地玩著雜耍,并保持系統的正常運轉。同時,內核也很公平,它將資源公平地分配給各個進程。但是,如果用戶需要給一個重要進程提高優先級、或是降低優先級,該怎么辦呢?答案是需要由用戶來為內核制定進程的優先級。這里對nice及renice命令做一個基本的介紹。
??nice命令可以修改進程的優先級,進而調整進程調度。nice值的范圍是[-20, 19], -20表示進程的最高優先級,19表示進程的最低優先級。Linux進程的默認nice值為0。使用nice可調整進程的優先級,這樣調度器就會依據進程優先級,為其分配CPU資源。
1)、sleep 200&后,ps -el | grep sleep抓取,無nice命令,優先級數值為0
linux中的nice用法。
2)、nice sleep 200&后,ps -el | grep sleep抓取,優先級NI數值為10
3)、nice -N sleep 200&,即在默認值0基礎上加N,ps -el | grep sleep抓取
4)、nice –N sleep 200&,僅管理員可在默認值0基礎上加 -N,ps -el | grep sleep抓取
shell中read的用法。
??在實際應用中,如果要運行一個CPU密集型程序,最好通過nice命令來啟動它,這樣可以保證其他進程獲得更高的優先級,即使服務器或臺式機在負載很重的情況下, 也可以快速響應。
??下面的測試代碼,是一個完全搶占CPU的程序,直接啟動或nice調整優先級后啟動,使用top觀測其CPU占有率,驗證結論。因為筆記本電腦是四個CPU,需要拉起來至少五個進程,才可以看到效果。
/********************************************
*內容:模擬一個一直搶占CPU的進程,測試nice命令
*時間:2018.03.19
*問題:
**********************************************/#include<stdio.h>int main(void)
{
while(1);
return 0;}
shell交互式命令、
??renice命令是與nice關聯的一個命令,由re兩個字母就知道可以重新調整進程執行的優先級,可以指定群組或者用戶名調整優先級等級,并修改隸屬于該群組或者用戶的所有程序優先級。等級范圍為[-20,19]。同樣僅系統管理員可以拉高優先級。nice在進程拉起時調整,renice在進程執行時調整。
??一個緊急進程,需要更多CPU資源時,可以拉低之前運行進程的優先級。
shell切換用戶執行腳本。
??linux下與進程優先級相關的系統調用,均在/usr/src/linux-headers-4.4.0-31/include/linux,sched.h文件夾內。包括內容有:
nice()、設置進程的優先級
sched_setscheduler()設置進程調度策略
sched_getscheduler()獲取進程調度策略 等等
參考資料:
1、linux man手冊
2、公眾號:Linux中國:《使用nice、cpulimit和cgroup限制cpu占用率》
糾錯與建議
郵箱:db_hebut@163.com
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态