Linux进程调度
进程优先级
CPU资源分配的先后顺序,就是指进程的优先权(priority)。优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能
查看系统进程
在Linux系统中,我们可以通过ps -l
来查看进程,获取到进程的优先级。
其中第一栏的有些参数我们需要先了解一下:
- UID:代表执行者的身份
- PID:代表这个进程的编号
- PPID:代表这个进程由哪个进程发展衍生而来,即父进程的代号
- PRI:代表这个进程可被执行的优先级,值越小优先级越高,也最早被执行。
- NI:代表这个进程的nice值。负值表示高优先级,正值表示低优先级。
在Linux中,进程的优先级范围是[60,99]40个级别,而nice值的范围是[-20,19]。如果nice命令在使用时不带任何参数,则会显示进程默认的nice值,一般为0,而进程的默认的PRI值是80。
调整进程的优先级
进程的优先级由PRI决定,其公式为 P R I ( n e w ) = P R I ( o l d ) + N I PRI(new) = PRI(old) + NI PRI(new)=PRI(old)+NI
由于 P R I ( o l d ) PRI(old) PRI(old)一般是80,所以调整优先级的时候,调整其nice值即可。我们来看一个例子来进行了解。
首先我们先创建一个test.c
文件,其中写以下代码:
#include <stdio.h>
#include <unistd.h> int main()
{ printf("I am a process, pid = %d\n", getpid()); while(1) {} return 0;
}
然后运行test.exe
文件。会一直陷入死循环当中
接着我们用ps -la
查看进程。
可以看到test.exe
的PRI是80,现在我们修改这个进程的优先级,即修改nice值。
nice指令
语法:nice [-n N] [command]
主要选项:该命令中,-n
选项用于指定将nice值设置为N。当-n
选项省略时,nice值默认为10。
由于我们刚才写的程序是死循环,也就是正在运行的进程,所以我们需要用到renice
指令,作用是改变正在运行的进程的nice值。
语法:
renice [-n] [-p|--pid] <pid>
renice [-n] [-g|--pgrp] <pgrp>
renice [-n] [-u|--user] <user>
选项:
选项 | 含义 |
---|---|
n | 指定nice值,注意n前面出现"-",会被当做负号处理 |
-p | 将选项解释为进程ID(默认) |
-g | 将选项解释为所属组的ID |
-u | 将选项解释为用户名或用户ID |
例如: |
renice -8 -p xxxxx #将PID为xxxxx的进程的nice值设置为-8
renice -8 -u zp #将属于用户zp的进程的nice值设置为-8
renice -8 -g zpG #将属于zpG组的进程的nice值设置为-8
熟悉这些选项之后,就可以改进程的nice值了
这时我们的test.exe
文件的PRI就变成了PRI = 80 + 11 = 91
了。
top指令
ps指令 用于静态监测进程状态,即只能查看当前进程的状态。而top指令可以持续监测进程的运行状态。
功能:top能够实时持续显示系统中各个进程的资源占用状况,其功能类似于Windows的任务管理器。
语法:top命令的语法较为复杂,但绝大多数选项并不常用,所以我们只用学习如下2种语法即可。
top
:不带任何参数,可以查看所有进程的状态信息。top -p pid
:通过-p
选项查看pid指定进程的状态信息。
执行top指令后,如果不退出,则会持续执行,并动态更新进程相关信息。退出top界面的话可以按“q”键或者按“ctrl+c”组合键。按下“?”键或按“H”键可以得到top命令交互界面的帮助信息。
接下来我对图片的中的各行信息进行解释。
第1行,与uptime
命令的执行结果相同。
第2行,当前运行的各类状态进程(任务)的数量。
第3行,CPU状态信息。
第4行,内存状态信息。
第5行,Swap,交换分区信息。
第7行,各进程的状态监测。各字段的具体含义如下。
- PID:进程的PID。
- USER:进程所有者
- PR:进程的优先级
- NI:nice值。
- VIRT:进程使用的虚拟内存总量
- RESet:进程使用的、未被换出的物理内存大小
- SHR:共享内存大小。
- S:进程状态
- %CPU:上次更新到现在的CPU时间占用百分比
- %MEM:进程使用的物理内存百分比
- TIME+:进程使用的CPU时间总计,单位为
1/100s
- COMMAND:进程名称。
当然我们也可以使用top
来修改nice值。方法如下:
-
先通过
ps
指令获取到进程的PID。 -
执行
top
指令,按下r
键r
代表你想要改变某个进程的nice值,此时会出现一个光标,让你输入要改变进程的PID:
-
输入PID后,按下回车键,然后提示让你输入你要改变的nice值,我们把nice值变成5。
-
按下
q
键,退出top界面。此时我们输入ps -la
来查看刚才的进程。
OK,修改成功。可以看到NI
值变成了5,而PRI
变成了85。