进程的优先级

Posted 酱油拌饭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程的优先级相关的知识,希望对你有一定的参考价值。

进程的优先级

[toc]

什么是优先级

优先级别高的进程,可以优先享用系统的资源

优先级的定义和配置

在启动进程时,为不同的进程使用不同的调度策略

nice值的高低决定进程的优先使用资源

nice值高:表示优先级越低,例如19,该进程容易将CPU使用量给其他进程

nice值低:表示优先级越高,例如-20,该进程很难让去CPU资源给其他进程

#设置优先级执行命令
nice -n (1-19)  命令
例:nice -n 19 vim 1.txt

##重置,已运行的程序优先级
命令: renice  -n  -(1-20)  PID   

后台进程管理

&符的用处
# 在执行的命令后面加 & 会直接将该命令放在后台执行
例 ping baidu.com & 就是把该命令放到后台执行

Ctrl + z
jobs bg fg
# 先把进程放在后台暂停 配合 bg将暂停的进程,在后台恢复运行

# 将执行的命令放入后台执行,并且将输出结果保存到 nohup.out文件中
nohup ping baidu.com &

# 将进程放入后台(开启一个子shell)
screen (没有命令需要下载)   yum install -y screen
-ls:查看所有screen的后台进程 
-r:指定后台进程号,进入该后台进程 
-S:指定后台进程的名字
Ctrl + a + d:放在后台执行

平均负载

什么是平均负载

平均负载是指,单位时间内,系统处于可运行状态(R)和不可中断状态(D)的平均进程数,也就是平均活跃进程数

平均负载多少合理

理想情况,一个cpu一个进程最合理,也就是4核cpu,平均负载为4的时候最合理。但是,通常我们会认为平均负载到了70%的时候,就应该观察了。如果是4核CPU,那么就在负载2.8时进行观察

#查看CPU的个数
1.ll /proc/cpuinfo

2.进入 top 按 1
  lscpu

CPU类型

CPU密集型:计算相关
IO密集型:数据库相关

测试负载分析实战

领导:某一台服务器,很卡,怎么办? 

卡的原因:服务器,负载太高 

如何定位,什么程序,导致负载高? 
如何定位,负载高,是哪个硬件引起的?
#模拟工具
stress (没有命令需要安装)  yum install -y stress

stress是Linux系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。
#使用工具
mpstat是多核CPU性能分析工具,用来实时检查每个CPU的性能指标,以及所有CPU的平均指标。 
pidstat是一个常用的进程性能分析工具,用来实时查看进程的CPU,内存,IO,以及上下文切换等性能指标

#使用stress命令模拟4个占用cpu进程
[root@localhost ~]# stress --cpu 4 --timeout 600

#使用mpstat命令查看,没5秒显示一次数据(可修改)
[root@localhost ~]# mpstat -P ALL 5 
下面可以看出,是用户态的进程导致CPU过高 
Linux 3.10.0-957.el7.x86_64 (localhost.localdomain) 05/06/2022 _x86_64_ (4 CPU) 
07:56:14 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
07:56:19 PM all 99.95 0.00 0.05 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
07:56:19 PM 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
07:56:19 PM 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
07:56:19 PM 2 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
07:56:19 PM 3 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

#使用pidstat查看
[root@localhost ~]# pidstat -u 5 2
-u指定几秒输出一次数据  2 ,总共输出2组数据

#也可以使用stress命令让io负载升高
[root@localhost ~]# stress --io 100 --timeout 600

#总结
1.系统卡顿时使用top命令查看系统负载   注:是系统负载
2.看系统负载  1分种  5分钟 15分钟的负载趋势
3.查看时什么情况导致负载上升
mpstat -p all  看是用户态,还是内核态,导致负载上升
用户态:CPU使用率,大量进程
内核态:磁盘IO,压缩文件,网络存储挂在,下载文件,数据库查询语句
4.查看是那个程序引起的用户态内核态负载上升
pidstat -u 5 2
5.查看了是某个进程后
  问题责任在于运维:查看是否是某条命令导致   查看是不是某个服务导致
  问题责任在于开发:查看开发的程序日志,导出日志,交给开发

以上是关于进程的优先级的主要内容,如果未能解决你的问题,请参考以下文章

作业调度算法

Linux的进程优先级NI和PR

Linux进程优先级&前后台理解

怎么用C语言实现多级反馈队列调度算法?

BFS/DFS 广度/深度优先搜索

多线程