Linux nice及renice命令使用
引言: linux内核是一个了不起的马戏表演者,它在进程和系统资源之间小心地玩着杂耍,并保持系统的正常运转。同时,内核也很公平,它将资源公平地分配给各个进程。但是,如果用户需要给一个重要进程提高优先级、或是降低优先级,该怎么办呢?答案是需要由用户来为内核制定进程的优先级。这里对nice及renice命令做一个基本的介绍。
一、nice命令
1.1、基本介绍
nice命令可以修改进程的优先级,进而调整进程调度。nice值的范围是[-20, 19], -20表示进程的最高优先级,19表示进程的最低优先级。Linux进程的默认nice值为0。使用nice可调整进程的优先级,这样调度器就会依据进程优先级,为其分配CPU资源。
1)、sleep 200&后,ps -el | grep sleep抓取,无nice命令,优先级数值为0
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抓取
1.2、使用场景
在实际应用中,如果要运行一个CPU密集型程序,最好通过nice命令来启动它,这样可以保证其他进程获得更高的优先级,即使服务器或台式机在负载很重的情况下, 也可以快速响应。
1.3、测试实例
下面的测试代码,是一个完全抢占CPU的程序,直接启动或nice调整优先级后启动,使用top观测其CPU占有率,验证结论。因为笔记本电脑是四个CPU,需要拉起来至少五个进程,才可以看到效果。
/********************************************
*内容:模拟一个一直抢占CPU的进程,测试nice命令
*时间:2018.03.19
*问题:
**********************************************/
#include<stdio.h>
int main(void)
{
while(1);
return 0;
}
二、renice命令
2.1、基本介绍
renice命令是与nice关联的一个命令,由re两个字母就知道可以重新调整进程执行的优先级,可以指定群组或者用户名调整优先级等级,并修改隶属于该群组或者用户的所有程序优先级。等级范围为[-20,19]。同样仅系统管理员可以拉高优先级。nice在进程拉起时调整,renice在进程执行时调整。
2.2、使用场景
一个紧急进程,需要更多CPU资源时,可以拉低之前运行进程的优先级。
2.3、测试实例
三、其他与进程优先级相关的系统调用
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