1.进程优先级
CPU是多任务的,在单核CPU中,CPU为每个任务分配时间片。假设每个任务的优先级是一样的,则每个任务都执行一个事件片,然后进入队列中等下下一个CPU时间片。
如果当某个任务非常重要时,我们就应该调整任务的优先级,分配更多的时间片给他。
在Linux中:
进程优先级 = 优先系数 + nice
其中,优先系数不建议修改,我们一般修改nice的值来改变进程的优先级,nice的取值范围为 [-20,19] 。
当进程优先级的值越大时,进程的优先级越低。
当进程优先级的值越小时,进程的优先级越高。
2.在图形界面下修改优先级
在centos7下,进入系统监视器:
然后在需要改变优先级的进程上点击右键:
选择Change priority,可以选择一个列表中的级别。也可以选择Custom自定义:
可以看到Nice value越低,优先级越高。
3.命令行修改进程优先级
1)实验说明
实验目的:观察修改进程优先级,进程对CPU占用的变化情况。
实验条件:假设,我们的CPU是2核的,现在有2个进程p1和p2,如果这两个进程任务都很繁重(例如 cat /dev/zero > /dev/null & ,无限循环的读取数据,并丢弃)。则这两个进程可能会被分到两个CPU核心上去执行。
2)关闭一个CPU核心
我们要观察修改优先级的效果,就要让p1和p2在同一个CPU上去运行,实现方案有两个:
- 关闭其中一个核心
- 修改CPU核心的亲和度
这里,我们选用关闭一个核心的方案:
lscpu # 查看当前CPU状态
关闭CPU核心1:
[root@centos7 cpu]# echo 0 > /sys/devices/system/cpu/cpu1/online
3)开启两个相同的高负荷进程
[root@centos7 cpu]# cat /dev/zero > /dev/null & [1] 67983 [root@centos7 cpu]# cat /dev/zero > /dev/null & [2] 67984
可以看到,p1和p2的进程ID分别为67983和67984。
4)使用TOP命令查看进程占用资源情况
top - 08:32:47 up 1 day, 9:14, 3 users, load average: 1.70, 0.64, 0.33 Tasks: 195 total, 4 running, 191 sleeping, 0 stopped, 0 zombie %Cpu(s): 5.8 us, 94.2 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 5166904 total, 2996052 free, 1070180 used, 1100672 buff/cache KiB Swap: 4063228 total, 4063228 free, 0 used. 4014436 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 67984 root 20 0 107976 616 504 R 49.3 0.0 0:31.95 cat 67983 root 20 0 107976 616 504 R 49.0 0.0 0:33.59 cat
可以看到,进程p1和p2占用的资源基本一致,PR=20,表示进程优先级的值为20,这是优先级的默认值(优先系数=20,nice=0)。
5)我们对p1修改nice值
修改p1进程的nice值为-20(优先级最高):
[root@centos7 cpu]# renice -n -20 67983 67983 (process ID) old priority 0, new priority -20
再使用TOP命令查看资源占用情况:
top - 08:35:36 up 1 day, 9:17, 3 users, load average: 3.88, 1.78, 0.80 Tasks: 197 total, 6 running, 191 sleeping, 0 stopped, 0 zombie %Cpu(s): 6.3 us, 93.4 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st KiB Mem : 5166904 total, 2995728 free, 1070504 used, 1100672 buff/cache KiB Swap: 4063228 total, 4063228 free, 0 used. 4014112 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 67983 root 0 -20 107976 616 504 R 95.8 0.0 2:08.61 cat 67984 root 20 0 107976 616 504 R 1.3 0.0 1:41.20 cat
可以看到,提高了优先级的p1进程占用了95.8%的CPU资源,而p2只占用了1.3%的CPU资源。
再将进程p1的nice值修改为19(优先级最低):
[root@centos7 cpu]# renice -n 19 67983 67983 (process ID) old priority -20, new priority 19
使用top命令查看:
top - 08:37:51 up 1 day, 9:19, 3 users, load average: 4.42, 3.03, 1.42 Tasks: 196 total, 3 running, 193 sleeping, 0 stopped, 0 zombie %Cpu(s): 7.1 us, 92.9 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 5166904 total, 2996212 free, 1070020 used, 1100672 buff/cache KiB Swap: 4063228 total, 4063228 free, 0 used. 4014596 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 67984 root 20 0 107976 616 504 R 96.7 0.0 2:02.63 cat 67983 root 39 19 107976 616 504 R 1.3 0.0 3:58.71 cat
可以看到,p1进程只占1.3%的CPU资源,而p2进程占用了96.7%的CPU资源。
4.在top命令中修改优先级
除了上面描述的,在图形界面和命令行使用renice修改进程优先级,还可以在top命令中直接修改进程优先级。
我们在top命令界面下,按 r 键(即renice),即可修改nice值:
top - 08:40:07 up 1 day, 9:21, 3 users, load average: 2.58, 2.77, 1.54 Tasks: 194 total, 4 running, 190 sleeping, 0 stopped, 0 zombie %Cpu(s): 6.1 us, 93.9 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 5166904 total, 2996776 free, 1069452 used, 1100676 buff/cache KiB Swap: 4063228 total, 4063228 free, 0 used. 4015164 avail Mem PID to renice [default pid = 67984] 67983 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 67984 root 20 0 107976 616 504 R 95.3 0.0 4:12.77 cat 63510 root 20 0 608564 38684 25212 S 1.3 0.7 0:36.00 gnome-system-mo 67983 root 39 19 107976 616 504 R 1.3 0.0 4:00.61 cat
按了r键,会出现上述标黄部分的提示,默认修改的是第一个进程。我们可以输入需要修改优先级的进程ID来指定。
然后会让我们输入[-20,19]范围的值(即nice值):
top - 08:40:07 up 1 day, 9:21, 3 users, load average: 2.58, 2.77, 1.54 Tasks: 194 total, 4 running, 190 sleeping, 0 stopped, 0 zombie %Cpu(s): 6.1 us, 93.9 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 5166904 total, 2996776 free, 1069452 used, 1100676 buff/cache KiB Swap: 4063228 total, 4063228 free, 0 used. 4015164 avail Mem Renice PID 67983 to value -19 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 67984 root 20 0 107976 616 504 R 95.3 0.0 4:12.77 cat 63510 root 20 0 608564 38684 25212 S 1.3 0.7 0:36.00 gnome-system-mo 67983 root 39 19 107976 616 504 R 1.3 0.0 4:00.61 cat
回车确认就修改成功了。
5.在运行进程时直接指定优先级(重要)
nice -n -20 cat /dev/zero > /dev/null &
6.指定进程运行在哪个CPU上(CPU亲和性)
taskset -c 0 cat /dev/zero > /dev/null &
将一个进程运行在CPU 0号核心上。
将指定CPU和修改优先级组合起来:
taskset -c 0 nice -n -20 cat /dev/zero > /dev/null &
===