当 Linux 内核尝试决定哪些运行中的进程可以访问 CPU 时,其中一个需要考虑的因素就是进程优先级的值(也称为 nice 值)。每个进程都有一个介于 -20 到 19 之间的 nice 值。默认情况下,进程的 nice 值为 0。
进程的 nice 值,可以通过 nice 命令和 renice 命令修改,进而调整进程的运行顺序。
nice命令
可以给要启动的进程赋予 NI 值,但是不能修改已运行进程的 NI 值。
nice 命令格式如下:
[root@localhost ~] # nice [-n NI值] 命令
-n NI值:给命令赋予 NI 值,该值的范围为 -20~19;
例如:
[root@localhost ~]# service httpd start[root@localhost ~]# ps -le 丨 grep "httd" | grep -v grepF S UIDPID PPID C PRI NI ADDRSZWCHAN TTYTIMECMD1 S0 20841 0 800- 1130-?00:00:00 httpd5 S2 2085 2084 0 800- 1130-?00:00:00 httpd5 S2 2086 2084 0 800- 1130-?00:00:00 httpd5 S2 2087 2084 0 800- 1130-?00:00:00 httpd5 S2 2088 2084 0 800- 1130-?00:00:00 httpd5 S2 2089 2084 0 800- 1130-?00:00:00 httpd#用默认优先级自动apache服务,PRI值是80,而NI值是0[root@localhost ~]# service httpd stop#停止apache服务#启动apache服务,同时修改apache服务进程的NI值为-5[rooteiocdlhost ~]# ps -le | grep "httpd" | grep -v grepF S UIDPID PPID C FRI NI ADDRSZ WCHAN TTYTIMECMD1 S0 21221 0 755-1130-?00:00:00 httpd5 S2 2123 2122 0 755-1130-?00:00:00 httpd5 S2 2124 2122 0 755-1130-?00:00:00 httpd5 S2 2125 2122 0 755-1130-?00:00:00 httpd5 S2 2126 2122 0 755-1130-?00:00:00 httpd5 S2 2127 2122 0 755-1130-?00:00:00 httpd#httpd进程的PRI值变为了75,而NI值为-5
renice 命令
同 nice 命令恰恰相反,可以在进程运行时修改其 NI 值,从而调整优先级。

renice 命令格式如下:
[root@localhost ~] # renice [优先级] PID
注意,此命令中使用的是进程的 PID 号,因此常与 ps 等命令配合使用。
例如:
[root@localhost ~]# renice -10 21252125: old priority -5, new priority -10[root@localhost ~]# ps -le | grep "httpd" | grep -v grep1 S 0 2122 1 0 75 -5 - 113.0 - ? 00:00:00 httpd5 S 2 2123 2122 0 75 -5 - 1130 - ? 00:00:00 httpd5 S 2 2124 2122 0 75 -5 - 1130 - ? 00:00:00 httpd5 S 2 2125 2122 0 70 -10 - 1130 - ? 00:00:00 httpd5 S 2 2126 2122 0 75 -5 - 1130 - ? 00:00:00 httpd5 S 2 2.127 2122 0 75 -5 - 1130 - ? 00:00:00 httpd#PID为2125的进程的PRI值为70,而NI值为-10
如何合理地设置进程优先级,曾经是一件让系统管理员非常费神的事情。但现在已经不是了,如何地 CPU 足够强大,能够合理地对进程进行调整,输入输出设备也远远跟不上 CPU 地脚步,反而在更多的情况下,CPU 总是在等待哪些缓慢的 I/O(输入/输出)设备完成数据的读写和传输任务。
然而,手动设置进程的优先级并不能影响 I/O 设备对它的处理,这就意味着,哪些有着低优先级的进程常常不合理地占据着本就低效地 I/O 资源。
linux用户级进程跟内核线程(进程)有什么差别
1、几乎所有的程序都要切换到内核态运行再返回用户态,用中断完成的,因为在内核下封装了一些东西,用户态下只是传入某些参数后调用内核态下的函数罢了,2、进程有三态(执行态,就绪态,阻塞态),cpu任何时刻都只有一个进程在执行,so从用户态切换到内核态时,用户态下的进程就处于阻塞或就绪态了,至于从用户态切换到内核态执行哪个函数那就看你在用户态下执行的是什么函数了,比如在用户态下的lseek在内核下就是llseek了,不一样的。3、这问题就是linux的内存管理了,这里就得提到三种地址(逻辑地址、线性地址、物理地址),这里我们提到的4G地址是逻辑地址,不是我们实际的物理地址,linux中一个进程用户占0-3G对应的内核占3G-4G部分说得不是很清楚,这是比较复杂的内容,需要从头看起,单就这几个问题是不能搞懂linux的,最好还是系统的学习,不断的重复
a,b,c都为int 型,值均为1,则下列表达试:++a||++b&&++c,求值后,变量a的值为?,b的值为?,c的值为?
经Linux环境验证:a=2; b=1; c=1;也就是只有a执行了++操作。 由于逻辑与&&的优先级高于逻辑或||,所以整个表达式可以转化为:(++a) || (++b && ++c)先执行子表达式(++a),结果a=2,并且这个子表达式的值也是2,非零,则由于逻辑运算的“短路”特性,后一个子表达式就不会再计算,因为整个逻辑或的结果已经确定了,即为真。 所以++b和++c是不会执行到的。
linux 怎么读取cpu功耗
获取CPU使用率1实时CPU使用率 类似任务管理器实时系统信息可以通过top命令查看。 显示的信息四个参数分别是:用户的模式(user)、低优先级的用户模式(nice)、系统内核模式(system)以及系统空闲的处理器时间(idle)2查看CPU处理器使用率对于CPU使用率一般都是通过CPU使用情况,查看/proc/stat cpu状态文件3平均CPU使用率对于一般某时间段CPU的使用率来说,可以通过查看/pRoc/loadavg 文件信息4第三方监控软件查看网上有很多网管,监控软件安装配置好之后。 可以通过网页管理查看CPU等硬件情况和CPU使用率,负载等参数END其它相关信息内存使用率 查看 /proc/meminfo查看内存详细信息,也可以通过free 命令查看网络利用率 通过查看文件/proc/net/dev 可以了解,centos系统的网络使用情况跟windows的网络情况类似
发表评论