阿Q的Linux运维学习之路(day24-2)-Linux进程管理-进程的优先级、系统平均负载

进程的优先级

进程的优先级指的是优先享受资源,就好比如我们生活排队买车票或者去银行办理业务,会有军人优先、老人优先或者vip客户窗口。
比如一些比较重要的进程拥有了优先级,就可以优先享用资源,避免在资源使用过载的情况下导致请求处理特别慢。

nice

在启动进程时,为不同的进程使用不同的调度策略。
nice命令用于以指定的进程调度优先级启动其他的程序。
nice 值越高: 表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。
nice 值越低: 表示优先级越高,例如-20,该进程更不倾向于让出CPU。
正常情况下一般nice值都为0。
选项:
-n -n选项后面跟具体的niceness值。niceness值的范围-20~19,小于-20或大于19的值分别记为-20和19。

nice -n -20 //设置优先级为 -20
nice -n 19 //设置优先级为19

renice

renice命令可以修改正在运行的进程的调度优先级。预设是以程序识别码指定程序调整其优先权,您亦可以指定程序群组或用户名称调整优先权等级,并修改所有隶属于该程序群组或用户的程序的优先权。只有系统管理者可以改变其他用户程序的优先权,也仅有系统管理者可以设置负数等级。
可用选项:

-g:指定进程组id;
-p<程序识别码>:改变该程序的优先权等级,此参数为预设值。
-u:指定开启进程的用户名。

将行程id为987及32的进程与进程拥有者为daemon及root的优先序号码加1:
renice 1 987 -u daemon root -p 32

注意:每一个进程都有一个唯一的id。

系统平均负载

当我们的系统运行变慢时,第一反应就是查看系统负载情况吧。在Linux系统中,uptime、w、top等命令都会有系统平均负载load average的输出
那么系统的平均负载是什么?
平均负载是指单位时间内,系统处于可运行状态不可中断状态的平均进程数,也就是平均活跃进程数,平均负载与 CPU 使用率并没有直接关系。
Load Average是CPU的Load,它所包含的信息不是CPU的使用率状况,而是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。

系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树。如果一个进程满足以下条件则其就会位于运行队列中:

  • 它没有在等待I/O操作的结果
  • 它没有主动进入等待状态(也就是没有调用’wait’)
  • 没有被停止(例如:等待终止)
    例如:
    [root@localhost ~]# uptime
     20:03:01 up 12:00,  3 users,  load average: 0.15, 0.05, 0.06
    
    命令输出的最后内容(0.15、0.05、0.06)表示在过去的1、5、15分钟内运行队列中的平均进程数量。 
    一般来说只要每个CPU的当前活动进程数不大于3那么系统的性能就是良好的,如果每个CPU的任务数大于5,那么就表示这台机器的性能有严重问题。对于上面的例子来说,假设系统有两个CPU,那么其每个CPU的当前任务数为:8.13/2=4.065。这表示该系统的性能是可以接受的。
可运行状态进程

可运行状态进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们ps 命令看到处于 R 状态的进程。

不可中断状态进程

系统中最常见的是等待硬件设备的 I/O 响应,也就是我们 ps 命令中看到的 D 状态(也称为 Disk Sleep)的进程。

当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的,这个时候的进程就处于不可中断状态。如果此时的进程被打断了,就容易出现磁盘数据与进程数据不一致的问题。所以,不可中断状态实际上是系统对进程和硬件设备的一种保护机制。

合理的平均负载值

最理想的状态是每个 CPU 上都刚好运行着一个进程,这样每个 CPU 都得到了充分利用。所以在评判平均负载时,首先你要知道系统有几个 CPU,这可以通过 top 命令获取,或grep 'model name' /proc/cpuinfo

在 4、2、1核的CPU上,如果平均负载为 2 时,不同的负载程度:

  • 在4 个 CPU 的系统上,意味着 CPU 有 50% 的空闲。
  • 在2 个 CPU 的系统上,意味着所有的 CPU 都刚好被完全占用。
  • 而1 个 CPU 的系统上,则意味着有一半的进程竞争不到 CPU。

平均负载数值的变化:

  • 如果 1 分钟、5 分钟、15 分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。
  • 但如果 1 分钟的值远小于 15 分钟的值,就说明系统最近 1 分钟的负载在减少,而过去 15 分钟内却有很大的负载。
  • 反过来,如果 1 分钟的值远大于 15 分钟的值,就说明最近 1 分钟的负载在增加,这种增加有可能只是临时性的,也有可能还会持续上升,所以就需要持续观察。

一般情况下,当平均负载高于 CPU 数量 70% 的时候,你就应该分析排查负载高的问题了。一旦负载过高,就可能导致进程响应变慢,进而影响服务的正常功能。但 70% 这个数字并不是绝对的,最推荐的方法,还是把系统的平均负载监控起来,使用不同时间段的负载变化趋势来分析调查。

平均负载与 CPU 使用率有什么关系

CPU 使用率是单位时间内 CPU 繁忙程度的统计。而平均负载不仅包括正在使用 CPU 的进程,还包括等待 CPU 或 I/O 的进程。因此,两者不能等同,有两种常见的场景如下所述:

  • CPU 密集型应用:大量进程在等待或使用 CPU,此时 CPU 使用率与平均负载呈正相关状态。

  • I/O 密集型应用:大量进程在等待 I/O,此时平均负载会升高,但 CPU 使用率不一定很高。

平均负载提供了一个快速查看系统整体性能的手段,反映了整体的负载情况。但只看平均负载本身,我们并不能直接发现,到底是哪里出现了瓶颈。所以,在理解平均负载时,也要注意:
平均负载高有可能是 CPU 密集型进程导致的;
平均负载高并不一定代表 CPU 使用率高,还有可能是 I/O 更繁忙了;
当发现负载高的时候,你可以使用 mpstat、pidstat 等工具,辅助分析负载的来源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值