使用nice调整进程优先级
进程的优先级数值从-20
到19
范围,数值越小优先级越高。默认的进程优先级是从该进程的父进程继承的,通常是0
。
只有超级用户root
可以设置更小的(更高的)优先级值,其他用户只能设置较大的(更低的)优先级值。
nice
nice
实际作用于进程的优先级数值依赖Unix操作系统设计的调度方式。特定的操作系统的调度方式有许多启发式的机制(例如,对于优先进程由于CPU时间片较多相应会获得更多的I/O)。
举个简单的例子,当两个捆绑CPU的进程同时在一个CPU上并发运行的时候,每个进程分到的CPU时间是20-p
,这个p
就是进程的优先级数值。这样一个nic
数值是+15
的进程就会得到普通优先级进程的分配的25%的CPU时间:(20-15)/(20-0)=0.25
。
检查进程的Nice值
使用ps
命令可以看到进程的nice值(也就是优先级)
输出显示
可以看到
init
初始进程的NI
(nice
值)是0
,一些系统关键进程的nice
值优先级较高是-5
,用户进程继承了init
的优先级,通常nice
是0
也可以使用top
命令,其中有一列NI
值就是进程运行的nice
值。
设置进程nice值
启动程序的时候设置nice
优先级。负
的nice
值将增加进程的优先级。注意,由于需要-
表示是一个参数,所以设置高优先级的的负
值的时候,需要使用两个-
,例如--10
表示设置nice
值是-10
检查优先级
可以看到
上述可以看到进程的优先级值是-10
使用-n
参数修改运行进程的优先级
-n
参数修改运行进程的优先级nice
命令的-n
参数可以修改进程的优先级,表示在nice
上加上一个数值。
我们来测试一下命令
然后检查
可以看到输出的进程的nice
值为10
(0+10=10)
举例:对大文件归档,降低归档命令优先级,可以用
-n 19
使得这个命令的nice
值为19
(实际是0+19=19
)
在生产环境中,经常需要定时清理系统过期的日志。如果直接使用
rm
命令脚本,对于海量文件或者非常巨大的日志文件,会导致系统响应缓慢影响业务(甚至系统低峰时期操作也会有影响)。此时应该在脚本中通过nice -n
命令,降低日志处理脚本的运行优先级。
-n 19
也可以写成-19
,注意,这里-19
的-
是参数的意思,设置的是正值。如果要设置-5
这个高优先级的nice
值,应该使用-n -5
或者--5
来表示(由于默认init
的nice值是0,所以进程启动默认的nice值都是以0为基线,这样--5
和-n -5
就恰好是相同的结果)
limits.conf
配置用户启动进程的默认nice值
limits.conf
配置用户启动进程的默认nice值在Linux中,可以通过修改/etc/security/limits.conf
的配置来设置:
设置
log
用户进程的执行优先级数值为19
,这样log
用户执行的脚本(如清理和归档)的优先级就很低,不会抢占业务系统的CPU时间
limits.conf
的语法是<domain><type><item><value>
,其中item
可以是nice
,就可以调整进程的优先级数值
domain
是username
,@groupname
,*
,%
(maxlogins限制)
修改已经运行的进程的优先级
renice
命令是修改已经在运行的进程的优先级。参考man renice
,这个命令是直接设置优先级数值(没有-n
参数)
显示提示信息
renice
命令还有两个非常有用的参数
-u user
:调整指定用户的所有进程的优先级
则调整user1
用户所有的进程的nice值为10
,这样这个用户的进程的优先级别就降低了。
-g group
:通过组名或组id来设置其所有的进程的优先级
Linux还有一个
ionice
的命令,针对的是I/O调度而不是CPU时间。
参考
[nice (Unix)](https://en.wikipedia.org/wiki/Nice_(Unix))
Last updated