基础命令学习目录首页html
进程调度是linux中很是重要的概念。linux内核有一套高效复杂的调度机制,能使效率极大化,但有时为了实现特定的要求,须要必定的人工干预。好比,你但愿操做系统能分配更多的CPU资源给浏览器进程,让浏览速度更快、更流畅,操做体验更好。那具体应该怎么作呢?尽管linux的进程调度算法十分复杂,但都是以进程的优先级为基础的。所以,只须要改变进程的优先级便可。linux
在linux中,nice
命令用于改变进程的优先级。算法
nice
命令?什么鬼?哪有命令直接说本身“nice”的?咋一看,这个名字确实很“nice”,只是这里的“nice”是指“niceness”,即友善度、谦让度。用于进程中,表示进程的优先级,也即进程的友善度。niceness值为负时,表示高优先级,能提早执行和得到更多的资源,对应低友善度;反之,则表示低优先级,高友善度。浏览器
nice
命令格式:nice [OPTION] [COMMAND [ARG]...]
。ruby
当nice没有选项时,输出值表示系统进程缺省的niceness值,通常为0。bash
xie@xie-VirtualBox:~$ nice 0
当nice
命令中没有给出具体的niceness值时,默认为10。如nice vi
设置vi进程的niceness为10。post
-n
选项后面跟具体的niceness值。niceness值的范围-20~19,小于-20或大于19的值分别记为-20和19。学习
xie@xie-VirtualBox:~$ nice -n 10 vi&
该命令设置vi进程的niceness值为10,也就是较低的优先级。ui
若是设置的niceness值为负,那么必需要有管理员权限。这也不难理解,当niceness为负时,意味着该进程要抢占其余进程的资源,必需要有权限才行;若是niceness为正,即表示谦让度高,这对其余进程来讲是喜闻乐见的,也固然就不用权限认证了。url
能够经过ps -l
查看进程的niceness值。
xie@xie-VirtualBox:~$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1000 1635 1634 0 80 0 - 2178 wait pts/13 00:00:00 bash 0 T 1000 1677 1635 0 90 10 - 1767 signal pts/13 00:00:00 vi 0 R 1000 1678 1635 0 80 0 - 1606 - pts/13 00:00:00 ps
NI列即表示进程的niceness值。vi进程对应的NI值正好为刚设置的10。那PRI列又是什么呢?PRI表示进程当前的总优先级,值越小表示优先级越高,由进程默认的PRI加上NI获得,即PRI(new) = PRI(old) + NI。由上程序,进程默认的PRI是80,因此加上值为10的NI后,vi进程的PRI为90。
因此,须要注意的是,NI即niceness的值只是进程优先级的一部分,不能彻底决定进程的优先级,但niceness值的绝对值越大,效果越显著。
--adjustment选项和-n选项的效果是同样的,在等号右边设置对应的niceness值便可。
xie@xie-VirtualBox:~$ nice --adjustment=16 vi& [1] 1681 xie@xie-VirtualBox:~$ ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1000 1635 1634 0 80 0 - 2178 wait pts/13 00:00:00 bas 0 T 1000 1681 1635 0 96 16 - 1767 signal pts/13 00:00:00 vi 0 R 1000 1682 1635 0 80 0 - 1606 - pts/13 00:00:00 ps
注意,直接使用“-N”也能够设置niceness值。好比,nice -12 vi&
将vi的niceness值设置为12,若是是nice --12 vi&
的话,则设置niceness的值为-12。这很容易混淆,建议使用-n或--adjustment选项,不易出错。
--help 显示帮助信息 --version 显示版本信息
以上讨论的都是为即将运行的进程设置niceness值,而renice
用于改变正在运行的进程的niceness值。
renice
,字面意思即从新设置niceness值,进程启动时默认的niceness值为0,能够用renice更新。
renice
语法:renice
[优先等级][
-g<程序群组名称>...][
-p<程序识别码>...][-u <用户名称>...]
如:
renice -5 -p 5200 #将PID为5200的进程的niceness设为-5 renice -5 -u xie #将属于用户xie的进程的niceness设为-5 renice -5 -g group1 #将属于group1组的程序的niceness设为5
命令:nice
参数:
-n ,--adjustment=N 两个参数含义相同,设置进程优先级的谦让值(修正值)为N
示例:
nice -n -10 ws_gw
设置进程ws_gw的优先级的修正值为-10
nice -19 ws_gw
已优先级19来启动ws_gw,此时-不标识负数,而表示参数指令,已19优先级来启动;
做用:
nice命令以更改过的优先序来执行程序,若是未指定程序,则会印出目前的排程优先序,内定的 adjustment 为 10,范围为 -20(最高优先序)到 19(最低优先序)。
--------也就是说要在启动时,在启动命令前加上 nice xx command才能生效;
例如: nice -10 ./aaa ../conf/aa.xml
--------./aaa ../conf/aa.xml 为正常启动命令,nice -10 即已修正值为-10来启动aaa
修正值的用法,进程真正的优先级=进程默认优先级+修正值(nice值)
PRI(real) = PRI(old) + NI
因此为负值则优先级越高,为正值优先级越低
其余说明:
top时进程信息字段的ni值即为修正值;最低为19,因此下图的20最终为19
已19优先级启动vi
已正常优先级启动vi
已修正值-10启动vi: