Wéi Setzt d'Linux Prozess Prioritéit Mat Nice a Renice Kommandoen


An dësem Artikel erkläre mir kuerz de Kernel Scheduler (och bekannt als de Prozess Scheduler), a Prozess Prioritéit, déi Themen sinn ausserhalb vum Ëmfang vun dësem Guide. Da daucht mir an e bëssen vun Linux Prozess Gestioun: gesinn wéi e Programm oder Kommando mat geännert Prioritéit lafen an och d'Prioritéit vun Lafen Linux Prozesser änneren.

Liest och: Wéi iwwerwaacht Linux Prozesser a setzt Prozesslimits op enger Per-Benotzer Basis

E Kernel Scheduler ass eng Eenheet vum Kernel déi de gëeegentste Prozess aus all lafenbare Prozesser bestëmmt fir nächst auszeféieren; et verdeelt Prozessor Zäit tëscht de lafende Prozesser op engem System. E lafenbare Prozess ass een deen nëmmen op CPU Zäit waart, et ass prett fir auszeféieren.

De Scheduler bildt de Kär vum Multitasking am Linux, mat engem prioritärbaséierte Scheduling Algorithmus fir tëscht de lafenbare Prozesser am System ze wielen. Et rangéiert Prozesser baséiert op déi verdéngtste wéi och d'Bedierfnes fir CPU Zäit.

De Kernel späichert vill Informatioun iwwer Prozesser abegraff Prozess Prioritéit déi einfach d'Fuerplang Prioritéit ass verbonne mat engem Prozess. Prozesser mat enger méi héijer Prioritéit ginn virun deenen mat enger méi niddereger Prioritéit ausgefouert, während Prozesser mat der selwechter Prioritéit een nom aneren, ëmmer erëm geplangt sinn.

Et ginn insgesamt 140 Prioritéiten an zwee verschidde Prioritéiteberäicher déi am Linux implementéiert sinn. Deen éischten ass e flotte Wäert (Niceness) dee rangéiert vun -20 (héchste Prioritéitswäert) bis 19 (niddregsten Prioritéitswäert) an de Standard ass 0, dat ass wat mir an dësem Guide entdecken. Déi aner ass d'Echtzäit Prioritéit, déi vun 1 bis 99 par défaut läit, dann sinn 100 bis 139 fir Benotzerraum geduecht.

Eng wichteg Feature vu Linux ass dynamesch Prioritéit-baséiert Fuerplang, wat et erlaabt datt de flotte Wäert vu Prozesser geännert gëtt (erhéijt oder reduzéiert) ofhängeg vun Äre Bedierfnesser, wéi mir méi spéit gesinn.

Wéi kontrolléiert de Nice Wäert vu Linux Prozesser

Fir déi flott Wäerter vu Prozesser ze gesinn, kënne mir Utilities wéi htop benotzen.

Fir Prozesser schéine Wäert mat ps Kommando am Benotzer-definéierte Format ze gesinn (hei NI weist d'Kolonn d'Schéinheet vu Prozesser).

$ ps -eo pid,ppid,ni,comm

Alternativ kënnt Dir Top oder htop Utilities benotzen fir Linux Prozesser schéi Wäerter ze gesinn wéi gewisen.

$ top
$ htop

Vun den Top- an htop-Outputen uewendriwwer mierkt Dir datt et eng Kolonn mam Numm PR an PRI empfindlech ass, déi d'Prioritéit vun engem Prozess weist.

Dëst bedeit also datt:

  • NI - ass de flotte Wäert, deen e Benotzerraumkonzept ass, wärend
  • PR oder PRI - ass déi aktuell Prioritéit vum Prozess, wéi se vum Linux Kernel gesi ginn.

Total number of priorities = 140
Real time priority range(PR or PRI):  0 to 99 
User space priority range: 100 to 139

Schéin Wäertberäich (NI): -20 bis 19

PR = 20 + NI
PR = 20 + (-20 to + 19)
PR = 20 + -20  to 20 + 19
PR = 0 to 39 which is same as 100 to 139.

Awer wann Dir e rt gesitt anstatt eng Zuel wéi am Screenshot hei ënnendrënner, heescht et am Fong datt de Prozess ënner Echtzäit Fuerplang Prioritéit leeft.

Wéi lafen ech e Kommando mat engem gegebene Nice Wäert op Linux

Hei wäerte mir kucken wéi d'CPU Benotzung vun engem Programm oder Kommando prioritär prioritär. Wann Dir e ganz CPU-intensive Programm oder Aufgab hutt, awer Dir verstitt och datt et eng laang Zäit dauere kann fir ze kompletéieren, kënnt Dir et eng héich oder favorabel Prioritéit setzen mat dem flotte Kommando.

D'Syntax ass wéi follegt:

$ nice -n niceness-value [command args] 
OR
$ nice -niceness-value [command args] 	#it’s confusing for negative values
OR
$ nice --adjustment=niceness-value [command args]

Wichteg:

  • Wa kee Wäert geliwwert gëtt, setzt Nice als Standard eng Prioritéit vun 10.
  • E Kommando oder Programm leeft ouni flott Defaults op eng Prioritéit vun Null.
  • Nëmmen root kann e Kommando oder Programm mat erhéiter oder héijer Prioritéit ausféieren.
  • Normal Benotzer kënnen nëmmen e Kommando oder Programm mat niddereger Prioritéit ausféieren.

Zum Beispill, amplaz e Programm oder Kommando mat der Standard Prioritéit ze starten, kënnt Dir et mat enger spezifescher Prioritéit starten andeems Dir folgend flott Kommando benotzt.

$ sudo nice -n 5 tar -czf backup.tar.gz ./Documents/*
OR
$ sudo nice --adjustment=5 tar -czf backup.tar.gz ./Documents/*

Dir kënnt och déi drëtt Method benotzen déi e bësse konfus besonnesch fir negativ Niceness Wäerter ass.

$ sudo nice -5 tar -czf backup.tar.gz  ./Documents/*

Ännert d'Prioritéit vun der Zäitplang vun engem Prozess am Linux

Wéi mir virdru scho gesot hunn, erlaabt Linux dynamesch Prioritéit-baséiert Fuerplang. Dofir, wann e Programm scho leeft, kënnt Dir seng Prioritéit mam Renice Kommando an dëser Form änneren:

$ renice -n  -12  -p 1055
$ renice -n -2  -u apache

Vun der Probe-Top-Output hei drënner ass d'Schéinheet vun der Teamspe+ mat PID 1055 elo -12 a fir all Prozesser am Besëtz vum Benotzer Apache ass -2.

Nach ëmmer dës Ausgang benotzt, kënnt Dir d'Formel gesinn PR = 20 + NI steet,

PR for ts3server = 20 + -12 = 8
PR for apache processes = 20 + -2 = 18

All Ännerungen déi Dir maacht mam Renice Kommando un de Prozesser vun engem Benotzer schéi Wäerter sinn nëmme uwendbar bis den nächsten Neistart. Fir permanent Standardwäerter ze setzen, liest déi nächst Rubrik.

Wéi Setzt De Standard Nice Wäert vun engem spezifesche Benotzerprozess

Dir kënnt de Standard schéine Wäert vun engem bestëmmte Benotzer oder Grupp an der /etc/security/limits.conf Datei setzen. Seng primär Funktioun ass d'Ressourcelimite fir d'Benotzer déi iwwer PAM ageloggt sinn ze definéieren.

D'Syntax fir eng Limit fir e Benotzer ze definéieren ass wéi follegt (an déi méiglech Wäerter vun de verschiddene Kolonnen ginn an der Datei erkläert):

#<domain>   <type>  <item>  <value>

Benotzt elo d'Syntax hei drënner, wou schwéier - heescht datt schwéier Linken a mëll Mëttelen ëmsetzen - déi mëll Grenzen ëmsetzen.

<username>  <hard|soft>  priority  <nice value>

Alternativ, erstellt e Fichier ënner /etc/security/limits.d/ deen Astellungen an der Haaptdatei hei uewen iwwerschreift, an dës Dateie ginn an alphabetesch Uerdnung gelies.

Fänkt un mat der Erstellung vun der Datei /etc/security/limits.d/tecmint-priority.conf fir de Benotzer tecmint:

# vi /etc/security/limits.d/tecmint-priority.conf

Füügt dann dës Konfiguratioun derbäi:

tecmint  hard  priority  10

Späichert an zou der Datei. Vun elo un wäert all Prozess am Besëtz vun tecmint e flotte Wäert vun 10 a PR vun 30 hunn.

Fir méi Informatioun, liest d'Man Pages of nice and renice:

$ man nice
$ man renice 

Dir kënnt och gär dës folgend Artikelen iwwer Linux Prozessmanagement liesen.

  1. Wéi Lafen Prozesser am Linux fannen an ëmbréngen
  2. E Guide fir Kill, Pkill a Killall Kommandoen fir e Prozess am Linux ofzeschléissen
  3. Wéi d'Systemverbrauch, Stéierungen a Probleemer op Linux Serveren iwwerwaachen
  4. CPUTool - Limitéiert a Kontroll CPU Utilisatioun vun all Prozess am Linux

An dësem Artikel hu mir kuerz de Kernel Scheduler erkläert, Prozess Prioritéit, gekuckt wéi e Programm oder Kommando mat modifizéierter Prioritéit lafen an och d'Prioritéit vun aktive Linux Prozesser änneren. Dir kënnt all Gedanken iwwer dëst Thema iwwer de Feedbackformular hei drënner deelen.