前言:
上一期为大家带来了进程的基础知识与ps命令的一些详细用法,这一期将会继续为大家分享更多的Linux进程知识。
在Linux中,进程优先级是指操作系统对进程进行调度和分配CPU时间的相对重要性或优先级的评估。进程优先级决定了进程在竞争CPU资源时的执行顺序。
在Linux中,进程优先级分为三类SYSTEM priority 系统进程优先级;real time priority 实时优先级,以及NICE非实时优先级。
系统优先级的范围为0-139, 值越小,优先级越高;
实时优先级范围为0-99,也被我们称为PR 值越大,优先级越高;
非实时优先级范围为-20-19, 值越小,优先级越高;
对应关系如图所示:
nice优先级
在系统资源匮乏时,nice值更高的进程可以获得更多的CPU资源。通过调整nice值,可以在系统负载高的情况下优化进程的执行顺序。NICE值默认为0,可手动进行调整。查看nice优先级
1. [root@YUTIAN ~]# ps -axo pid,comm,nice | head -n 10
2. PID COMMAND NI
3. 1 systemd 0
4. 2 kthreadd 0
5.
修改进程优先级
关于NICE优先级的修改,有两种情况,在进程未开始时直接指定优先级启动,其二是修改已经启动的进程优先级。nice命令一般需要具有root或超级用户权限才能修改其他用户的进程优先级。
此处以dd命令为例:
##在进程未开始时直接指定优先级启动
[root@YUTIAN ~]# nice -n 10 dd if=/dev/zero of=/dev/null &
[1] 5124
[root@YUTIAN ~]# ps -axo pid,comm,nice | head -n 1 ;ps -axo pid,comm,nice | grep -w dd | grep -v grep
PID COMMAND NI
5124 dd 10
##修改已经启动的进程优先级
[root@YUTIAN ~]# renice -n -10 5124
5124 (process ID) old priority 10, new priority -10
[root@YUTIAN ~]# ps -axo pid,comm,nice | head -n 1 ;ps -axo pid,comm,nice | grep -w dd | grep -v grep
PID COMMAND NI
5124 dd -10
优先级案例
##CPU小知识:一个CPU在单一时间只能够运行1个进程
##系统情况:
RHEL 8.4 版本系统
2核CPU
##CPU情况: [root@YUTIAN ~]# mpstat -P ALL
Linux 4.18.0-305.el8.x86_64 (YUTIAN.example.com) 05/29/2023 _x86_64_ (2 CPU)
10:47:52 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
10:47:52 AM all 2.65 0.04 8.83 0.42 1.18 0.59 0.00 0.00 0.00 86.29
10:47:52 AM 0 2.81 0.07 9.53 0.28 1.31 0.42 0.00 0.00 0.00 85.57
10:47:52 AM 1 2.49 0.02 8.13 0.56 1.04 0.77 0.00 0.00 0.00 87.01
##此时系统有两个CPU,并且CPU资源充足,创建进程来消耗CPU资源
##创建一个-20优先级的进程
[root@YUTIAN ~]# nice -n -20 md5sum /dev/zero &
[1] 1237
##创建一个-10优先级的进程
[root@YUTIAN ~]# nice -n -10 sha1sum /dev/zero &
[2] 1238
##此时CPU资源状况
[root@YUTIAN ~]# ps -e -o pid,nice,%cpu,comm | head -n1 ; ps -e -o pid,nice,%cpu,comm | grep sum | grep -v grep
PID NI %CPU COMMAND
1237 -20 92.1 md5sum
1238 -10 94.1 sha1sum
##由于无其他高优先级进程,故这两个进程拿到两个CPU的所有资源
##再创建一个-20优先级的进程
[root@YUTIAN ~]# nice -n -20 sha512sum /dev/zero &
[3] 1259
##此时CPU资源状况
[root@YUTIAN ~]# ps -e -o pid,nice,%cpu,comm | head -n1 ; ps -e -o pid,nice,%cpu,comm | grep sum | grep -v grepl
PID NI %CPU COMMAND
1237 -20 98.6 md5sum
1238 -10 16.2 sha1sum
1259 -20 90.0 sha512sum
##三个进程争抢两个CPU资源,两个-20高优先级进程得到等多资源,-10优先级进程仅得到少部分资源
##得出结论:
当系统资源匮乏时,优先级更高的进程得到更多的CPU资源
PR实时优先级
在Linux中,PR(Priority)是进程的实时优先级,它用于实时调度策略下的进程调度。实时优先级是用来确保对实时任务的响应性要求,而非分时调度中的普通进程。PR实时优先级取值范围为 0-99,这个值越高,优先级越高,默认为0。查看PR优先级
[root@YUTIAN ~]# chrt -p 24959
pid 24959's current scheduling policy: SCHED_FIFO
pid 24959's current scheduling priority: 1
修改PR进程优先级
关于PR优先级的修改,同nice一样,有两种情况,在进程未开始时直接指定优先级启动,其二是修改已经启动的进程优先级。chrt命令一般需要具有root或超级用户权限才能修改其他用户的进程优先级。
此处以md5sum命令为例:
##在进程未开始时直接指定优先级启动
[root@YUTIAN ~]# chrt -f 1 md5sum /dev/zero &
[1] 24959
[root@YUTIAN ~]# chrt -p 24959
pid 24959's current scheduling policy: SCHED_FIFO
pid 24959's current scheduling priority: 1
##修改已经启动的进程优先级
[root@YUTIAN ~]# chrt -r -p 10 24959
[root@YUTIAN ~]# chrt -p 24959
pid 24959's current scheduling policy: SCHED_RR
pid 24959's current scheduling priority: 10
优先级案例
###系统情况: RHEL 8.4 版本系统
2核CPU
##CPU情况:
[root@YUTIAN ~]# mpstat -P ALL
Linux 4.18.0-305.el8.x86_64 (YUTIAN.example.com) 05/29/2023 _x86_64_ (2 CPU)
11:33:02 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11:33:02 AM all 56.28 0.05 5.25 1.70 1.58 0.14 4.19 0.00 0.00 30.81
11:33:02 AM 0 58.73 0.03 4.31 1.43 1.93 0.14 3.92 0.00 0.00 29.50
11:33:02 AM 1 53.84 0.07 6.17 1.97 1.24 0.15 4.45 0.00 0.00 32.12
##此时系统有两个CPU,并且CPU资源充足,创建进程来消耗CPU资源
##创建一个1优先级的进程
[root@YUTIAN ~]# chrt -f 1 md5sum /dev/zero &
[1] 24971
##创建一个10优先级的进程
[root@YUTIAN ~]# chrt -f 20 sha1sum /dev/zero &
[2] 24972
##此时CPU资源状况
PID USER PR NI %CPU COMMAND
24972 root -11 0 95.3 sha1sum
24971 root -2 0 94.7 md5sum
##由于无其他高优先级进程,故这两个进程拿到两个CPU的所有资源
##再创建一个10优先级的进程
[root@YUTIAN ~]# chrt -f 10 sha256sum /dev/zero &
[3] 24973
##此时CPU资源状况
PID USER PR NI %CPU COMMAND
24973 root -11 0 95.0 sha256sum
24972 root -11 0 94.7 sha1sum
24971 root -2 0 0.0 md5sum
##三个进程争抢两个CPU资源,两个10高优先级进程得到等多资源,1优先级进程基本得不到资源
##得出结论:
当系统资源匮乏时,优先级更高的进程得到更多的CPU资源
在平常使用系统时,特别是当系统硬件资源匮乏时,优先级概念可以帮助我们给需要的进程分配更多的资源,但进程优先级不是唯一影响进程调度的因素。其他因素包括进程的实际使用CPU时间的量、进程的等待时间、进程的IO操作等。进程优先级只是一个相对的概念,用于操作系统决定进程在竞争CPU资源时的顺序。