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.pswp.cn/news/917041.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917041.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917041.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于 C 語言視角:流程圖中分支與循環結構的深度解析

前言(約 1500 字)在 C 語言程序設計中,控制結構是構建邏輯的核心骨架,而流程圖作為可視化工具,是將抽象代碼邏輯轉化為直觀圖形的橋梁。對于入門 C 語言的工程師而言,掌握流程圖與分支、循環結構的對應關系…

threejs創建自定義多段柱

最近在研究自定義建模,有一個多斷柱模型比較有意思,分享下,就是利用幾組點串,比如上中下,然后每組點又不一樣多,點續還不一樣,(比如第一個環的第一個點在左邊,第二個環在右邊)&#…

Language Models are Few-Shot Learners: 開箱即用的GPT-3(四)

Result續 Winograd-Style Tasks Winograd-Style Tasks 是自然語言處理中的一類經典任務。它源于 Winograd Schema Challenge(WSC),主要涉及確定代詞指的是哪個單詞,旨在評估模型的常識推理和自然語言理解能力。 這個任務中的具體通常包含高度歧義的代詞,但從語義角度看…

BGP高級特性之認證

一、概述BGP使用TCP作為傳輸協議,只要TCP數據包的源地址、目的地址、源端口、目的端 口和TCP序號是正確的,BGP就會認為這個數據包有效,但數據包的大部分參數對于攻擊 者來說是不難獲得的。為了保證BGP免受攻擊,可以在BGP鄰居之間使…

商旅平臺怎么選?如何規避商旅流程中的違規風險?

在中大型企業的商旅管理中,一個典型的管理“黑洞”——流程漏洞與超標正持續吞噬企業成本與管理效能:差標混亂、審批脫節讓超規訂單頻頻闖關,不僅讓企業商旅成本超支,還可能引發稅務稽查風險。隱性的合規風險,比如虛假…

Anaconda的常用命令

Anaconda 是一個用于科學計算、數據分析和機器學習的 Python 發行版,包含了大量的預安裝包。它配有 conda 命令行工具,方便用戶管理包和環境。以下是一些常用的 conda 命令和 Anaconda 的常見操作命令,幫助你高效管理環境和包。1. 環境管理創…

JVM之【Java虛擬機概述】

目錄 對JVM的理解 JVM的架構組成 類加載系統 執行引擎 運行時數據區 垃圾收集系統 本地方法庫 對JVM的理解 JVM保證了Java程序的執行,同時也是Java語言具有跨平臺性的根本原因;Java源代碼通過javac等前端編譯器生成的字節碼計算機并不能識別&…

RabbitMQ+內網穿透遠程訪問教程:實現異地AMQP通信+Web管理

RabbitMQ是一個開源的消息隊列中間件,基于Erlang開發,遵循AMQP(Advanced Message Queuing Protocol,高級消息隊列協議)標準,主要用于實現異步通信、消息解耦和系統間數據傳輸。它的核心作用是在分布式系統中…

go 語言 timer 與 ticker理論和實例大全

目錄 1. 時間之門的鑰匙:Timer與Ticker的本質 2. Timer:精準的單次計時 2.1 Timer的基礎用法 2.2 停止與重置Timer 2.3 Timer的高級技巧:優雅處理并發 3. Ticker:時間的節拍器 3.1 Ticker的基本用法 3.2 Ticker的高級應用:動態調整周期 4. Timer與Ticker的結合:打…

MySQL 45講 16-17

全字段排序 explain 中的 using fiesort ,掃描 數據,取出符合判斷條件的 數據,到sort buffer中,然后對排序字段采用快速排序進行 排序后直接將 所需字段進行返回 如果 字段長度所占內存大于所分配 的sort buffer ,需要借助 臨時文件 進行 數據的存放排序,此時會采用 歸并排序,將…

QT項目 -仿QQ音樂的音樂播放器(第四節)

一、RecBox中btUp和btDown按鈕clicked處理 選中左右鍵(btUp和btDown按鈕)然后右擊轉到槽->click() void RecBox::on_btUp_clicked() {}void RecBox::on_btDown_clicked() {} 二、imageList中圖片分組 // recbox.h 中新增 int currentIndex; // 標記…

DeepSeek SEO關鍵詞優化提升流量增長

內容概要DeepSeek SEO關鍵詞優化致力于通過科學的方法,顯著提升網站在搜索引擎中的可見度與自然流量。其核心在于深入理解并精準匹配用戶的真實搜索意圖,而非僅僅堆砌詞匯。具體來說,該策略運用深度意圖導向策略,確保內容與用戶需…

# Ubuntu 系統設置 USB PnP 音頻設備為默認設備的完整教程

Ubuntu 系統設置 USB PnP 音頻設備為默認設備的完整教程 在使用 Ubuntu 系統時,尤其是在嵌入式設備如 NVIDIA Jetson 系列上,我們經常需要將 USB PnP 音頻設備設置為默認設備。本文將詳細介紹如何通過命令行配置,使 USB PnP 音頻設備在系統重…

Hadoop JMX 配置的完整文檔

一、JMX 基礎概念與 Hadoop 支持 1、JMX 作用。 Java Management Extensions(JMX)提供標準 API 監控 JVM 應用運行時狀態(內存、線程、GC)及 Hadoop 組件指標(HDFS 容量、RPC 性能、節點狀態) 2、Hadoop 組…

arm架構系統打包qt程序--麒麟操作系統為例

檢查系統架構 uname -a如果顯示是aarch644或arm64,說明你使用的是ARM架構,,需要下載ARM版本。 下載對應架構的linuxdeployqt 編寫腳本 vim deploy.sh#!/bin/bash APP_NAME"sunny450_silc"# 確保deploy目錄存在 mkdir -p deploy# 復…

Kong API Gateway深度解析:插件系統與微服務架構的技術基石

在微服務(microservices)架構主導的今天,API網關(API Gateway)作為服務入口的“交通樞紐”,承擔著流量調度、安全防護、可觀測性(observability)等核心職責。Kong作為開源API網關領域…

Linux應用開發基礎知識——Makefile初級教程(九)

目錄 一、Makefile是啥? 1.1、了解幾種文件(.o 文件和.c文件 ) 1.2、關于Makefile的寫法 1.3、簡單使用Makefile基本指令 1.4、引入偽目標 1.5、Makefile的優點 1.6、Makefile的使用 二、Makefile創建和使用變量 2.1、創建變量的目的…

面試問題收集——卷積神經網絡

博主會經常分享自己在人工智能階段的學習筆記,歡迎大家訪問我滴個人博客!(養成系Blog!) 小牛壯士滴Blog~ - 低頭趕路 敬事如儀https://kukudelin.top/ 01-卷積基礎知識 問:簡述卷積基本操作,…

Kubernetes 全面解析:從基礎設施變革到核心架構詳解

引言在容器化技術席卷全球的今天,Kubernetes(簡稱 K8s)已成為容器編排領域的事實標準。無論是互聯網企業還是傳統行業,都在通過 Kubernetes 實現應用的高效部署、彈性擴展和自動化運維。但對于初學者而言,Kubernetes 的…

哈希相關的模擬實現

哈希相關的模擬實現哈希表的模擬實現閉散列除留取余法查找、插入和刪除閉散列參考程序開散列除留取余法(數組鏈表)迭代器查找和刪除插入開散列參考程序unordered_map和unordered_set的模擬實現unordered_mapunordered_set建議先看 哈希的概念及其應用-CS…