今天注意看到在/etc/ anacrontab 文件中有个命令nice run-parts /etc/cron.daily,里面有个nice命令。这个nice以及多次看到,今天就来阐述一番!
1、linux多任务特性。
逻辑处理单元单位时间只能处理一个任务,时间片技术会把时间切分,时间偏内快速切换来实现,反馈到用户就是多任务处理。处理进程快速切换的是进程调度程序,在内核中为kernd。
2、进程优先级
因为由进程调度的原因,就会有进程优先级,在时间片内分配到多的时间。大都数进程使用的调度策略是SCHED_NORMAL,指定进程运行相对优先级,即nice值。nice命令用来设置优先级,优先级的数值为-20~19,其中数值越小优先级越高,数值越大优先级越低,-20的优先级最高,19的优先级最低。
3、nice级别与权限
root用户可以设置负nice值以及降低现有进程的nice级别,范围-20—19 .
普通用户非特权用户仅允许设置正的nice级别,而且只能提升,不能降低。范围0—19 。
这里有个误区:nice值=优先级 。ps -l 命令可以查看PRI进程的优先级(-99—39之间)。此值越小,进程的优先级别越高。而NI,也就是我们所要说的nice值(通过nice命令设置),其表示进程可被执行的优先级的修正数值。PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice。所以,nice命令设置的优先级不是程序最终的优先级,而只是优先级的修正数值。
4、获取进程的nice级别
gnome-system-monitor可视化查看,笔者在云服务器就不演示了。
使用top指令查看nice值;
使用ps指令查看nice值。
5、使用nice影响进程优先级
大多数情况下,新启动的进程运行级别为0(shell的优先级为0) 。要启动不同nice运行级别的进程,需要使用nice指令,可以改变进程运行的优先等级。
nice -n num command,当当nice没有选项时,输出值表示系统进程缺省的niceness值,一般为0。niceness值可以直接运行nice得到。
在腾讯云服务器测试:
先开一个终端有运行 cat /dev/zero >/dev/null ,“零”设备,可以无限的提供空字符输出到null中,让系统忙起来。可以使用w指令(w命令用于显示目前登入系统的用户信息。)查看系统负载率load average在升高。
再在另一个终端中运行下面的命令。/dev/urandom随机数设备,提供10m不间断的随机字节流。使用time查看不同运行级别的运行时间。第一个指令运行级别是默认0,第二个运行级别最高,时间最短。
6、renice更改现有进程的nice级别
renice可以重新调整重程序执行的优先级等级。只有普root用户可以改变其他用户的优先级,普通用户只能提示自身的优先级。
如下。sleep 1000 & 后台运行1000秒的sleep,使用ps命令选择出nice信息,root的renice可以提高降低nice值,但是大于19则会直接设置为19.
如下。 sleep 1000 & 后台运行1000秒的sleep,普通用户只能降低运行级别,加大nice值,没有权限减少nice值。
网友评论