当前位置: 首页 > news >正文

Linux 进程调度管理

进程调度器可粗略分为两类:

  • 实时调度器(kernel),系统中重要的进程由实时调度器调度,获得CPU能力强。

  • 非实时调度器(user),系统中大部分进程由非实时调度器调度,获得CPU能力弱。

实时调度器

实时调度器支持的调度策略:数字越大优先级越高

非实时调度器

非实时调度器支持的调度策略:

  • SCHED_NORMAL,标准的轮询方式时间共享调度,也称为SCHED_OTHER

  • SCHED_BATCH,针对批量方式执行的进程策略。不像 SCHED_NORMAL 频繁竞争,任务可以长时间运行。

  • SCHED_IDLE,用于执行非常低的优先级应用。使用 SCHED_IDLE 调度策略运行的进程比nice 19运行的进程优先级还低。

常规系统上运行的大多数进程都使用 SCHED_OTHER 调度策略。由于并非所有进程都同等重要,因此可以为使用SCHED_OTHER调度策略运行的程序指定相对优先级,称为nice值。

有40种不同级别的nice值,范围 -20(最高优先级)到 19(最低优先级):

  • nice 值越高,代表优先级越低,获取CPU能力越弱。

  • nice 值越低,代表优先级越高,获取CPU能力越强。

注意: 当不存在CPU资源竞争时,即使nice值高的进程也可以获得足够CPU资源。

ps命令

[root@server ~ 13:54:23]# ps -o nice,cmd $(pgrep systemd)NI CMD0 /usr/lib/systemd/systemd --switched-root --system --deserialize 220 /usr/lib/systemd/systemd-journald0 /usr/lib/systemd/systemd-udevd0 /usr/lib/systemd/systemd-logind​

默认情况下,子进程将继承父进程的nice值,通常为0。

[lyk@centos7 ~]$ md5sum /dev/zero &[1] 55725[lyk@centos7 ~]$ ps -o pid,nice,command $$ 55725PID  NI COMMAND52751   0 -bash55725   0 md5sum /dev/zero# $$ 代表当前终端中运行的 shell 程序 PID

结论: 优先级最低的实时调度器进程的优先级高于优先级最高的非实时调度器进程的优先级。

以下示例通过top命令查看进程

nice 命令

# nice值默认是10[root@server ~ 18:42:32]# nice md5sum /dev/zero &[1] 2255[root@server ~ 18:43:13]# ps -o pid,nice,commandPID  NI COMMAND2163   0 -bash2255  10 md5sum /dev/zero2256   0 ps -o pid,nice,command
普通用户仅允许使用正数的nice值运行程序。
#正数的nice值普通用户可以设置[lyk@server ~ 18:44:04]$ nice -n 2 md5sum /dev/zero &[1] 2309[lyk@server ~ 18:45:54]$ ps -o pid,nice,command 2255PID  NI COMMAND2255  10 md5sum /dev/zero[lyk@server ~ 18:44:19]$ nice -n -2 md5sum /dev/zero &[2] 2311#无法设置负数的优先级[lyk@server ~ 18:44:24]$ nice: 无法设置优先级: 权限不够

renice 命令

#普通用户只能 降低优先级(提高nice值)[lyk@server ~ 18:51:47]$ sleep 300 &[4] 2436[lyk@server ~ 18:54:45]$ ps -l -p 2436F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD0 S  1000   2436   2266  0  80   0 - 27013 hrtime pts/0    00:00:00 sleep[lyk@server ~ 18:54:56]$ renice -n 5 24362436 (进程 ID) 旧优先级为 0,新优先级为 5​#普通用户改其他拥有者创建的进程失败2436 (进程 ID) 旧优先级为 0,新优先级为 5[lyk@server ~ 18:55:12]$ renice -n -2 2255renice: 设置 2255 的优先级失败(进程 ID): 不允许的操作[lyk@server ~ 18:57:06]$ ps -o pid,nice,command 2255PID  NI COMMAND2255  10 md5sum /dev/zero#进入root修改优先级[root@server ~ 18:57:22]# renice -n -2 22552255 (进程 ID) 旧优先级为 10,新优先级为 -2[root@server ~ 18:57:28]# ps -o pid,nice,command 2255PID  NI COMMAND2255  -2 md5sum /dev/zero[root@centos7 ~]$ pkill md5sum[1]   已终止               nice md5sum /dev/zero[2]-  已终止               nice -n -2 md5sum /dev/zero[3]+  已终止               nice -n 2 md5sum /dev/zero

管理进程优先级-实时调度策略

  • chrt 命令用于获取和设置实时调度器进程优先级,以及更改进程调度器。

示例

# 查看进程优先级范围,chrt不能用于调整非实时进程nice值优先级。[root@centos7 ~]# chrt -mSCHED_OTHER min/max priority    : 0/0SCHED_FIFO min/max priority : 1/99SCHED_RR min/max priority   : 1/99SCHED_BATCH min/max priority    : 0/0SCHED_IDLE min/max priority : 0/0SCHED_DEADLINE min/max priority : 0/0​# 以SCHED_RR调度器和优先级为5运行md5sum进程[root@server ~ 14:20:59]# chrt -r 5 md5sum /dev/zero &[1] 2020[root@server ~ 14:24:10]# ps -o pid,cls,rtprio,command 2020PID CLS RTPRIO COMMAND2020  RR      5 md5sum /dev/zero# 修改进程调度器和优先级[root@server ~ 14:21:53]# chrt -f --pid 10 2020[root@server ~ 14:23:16]# ps -o pid,cls,rtprio,command 2020PID CLS RTPRIO COMMAND2020  FF     10 md5sum /dev/zero​# 修改进程调度器为非实时[root@server ~ 14:23:25]# chrt -o --pid 0 2020[root@server ~ 14:24:03]# ps -o pid,cls,rtprio,command 2020PID CLS RTPRIO COMMAND2020  TS      - md5sum /dev/zero
http://www.dtcms.com/a/308455.html

相关文章:

  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘plotly’问题
  • SAM附录详解
  • 乱删文件,电脑不能开机,怎么办
  • 电子电路原理学习笔记---第5章特殊用途二极管---第1天
  • XSS跨站脚本攻击详解
  • 从0到1学PHP(九):PHP 会话管理:跟踪用户状态
  • opencv解迷宫
  • Nuitka:将源码编译为 `.pyd`
  • vue+elementui实现问卷调查配置可单选、多选、解答
  • vector的增删改查模拟实现(简单版)【C++】
  • 【ProtoBuf】ProtoBuf安装
  • 力扣面试150(45/150)
  • 【C语言】深度剖析指针(三):回调机制、通用排序与数组指针逻辑
  • esp32s3 + ov2640,给摄像头加上拍照功能,存储到sd卡
  • 109㎡中古风家装:北京业之峰在朝阳区绘就温馨画卷
  • 【实际项目1.2-西门子PLC的报警监控思路】
  • Java多线程详解(1)
  • C#反射的概念与实战
  • [2025CVPR-小样本方向]ImagineFSL:基于VLM的少样本学习的想象基集上的自监督预训练很重要
  • 三方支付详解
  • SQL 中 WHERE 与 HAVING 的用法详解:分组聚合场景下的混用指南
  • 大数据平台数仓数湖hive之拉链表高效实现
  • 深度学习入门:用pytorch跑通GitHub的UNET-ZOO项目
  • 云服务器数据库
  • Camx-查看sensor mode 和效果参数
  • (LeetCode 每日一题) 2683. 相邻值的按位异或 (位运算)
  • 网络操作系统与应用服务器-1
  • SIwave 中 SIwizard 的 500 多个标准列表
  • 代码详细注释:演示多线程如何安全操作共享变量,使用互斥锁避免数据竞争。
  • Linux 文件系统基本管理