Zoeken op website

Hoe u de Linux-procesprioriteit kunt instellen met behulp van leuke en renice-opdrachten


In dit artikel leggen we kort de kernelplanner (ook bekend als de procesplanner) en procesprioriteit uit, dit zijn onderwerpen die verder gaan dan de reikwijdte van deze gids. Vervolgens duiken we in een klein stukje Linux-procesbeheer: we zien hoe je een programma of opdracht uitvoert met gewijzigde prioriteit en hoe je ook de prioriteit van het uitvoeren van Linux-processen kunt wijzigen.

Lees ook: Linux-processen monitoren en proceslimieten per gebruiker instellen

De Linux Kernel Scheduler begrijpen

Een kernelplanner is een eenheid van de kernel die uit alle uitvoerbare processen bepaalt welk proces het meest geschikt is om vervolgens uit te voeren; het wijst processortijd toe tussen de uitvoerbare processen op een systeem. Een uitvoerbaar proces is een proces dat alleen op CPU-tijd wacht en klaar is om te worden uitgevoerd.

De planner vormt de kern van multitasking in Linux en gebruikt een op prioriteiten gebaseerd planningsalgoritme om te kiezen tussen de uitvoerbare processen in het systeem. Het rangschikt processen op basis van de meest verdienstelijke en de behoefte aan CPU-tijd.

Inzicht in procesprioriteit en Nice Value

De kernel slaat veel informatie op over processen, inclusief procesprioriteit, wat eenvoudigweg de planningsprioriteit is die aan een proces is gekoppeld. Processen met een hogere prioriteit worden vóór de processen met een lagere prioriteit uitgevoerd, terwijl processen met dezelfde prioriteit herhaaldelijk achter elkaar worden gepland.

Er zijn in totaal 140 prioriteiten en twee verschillende prioriteitsbereiken geïmplementeerd in Linux. De eerste is een mooie waarde (aardigheid) die varieert van -20 (waarde met de hoogste prioriteit) tot 19 (waarde met de laagste prioriteit) en de standaard is 0, dit is wat we in deze handleiding zullen ontdekken. De andere is de realtime prioriteit, die standaard varieert van 1 tot 99 en vervolgens 100 tot 139 zijn bedoeld voor gebruikersruimte.

Een belangrijk kenmerk van Linux is dynamische, op prioriteiten gebaseerde planning, waardoor de mooie waarde van processen kan worden gewijzigd (verhoogd of verlaagd) afhankelijk van uw behoeften, zoals we later zullen zien.

Hoe u de mooie waarde van Linux-processen kunt controleren

Om de mooie waarden van processen te zien, kunnen we hulpprogramma's gebruiken zoals ps, top of htop.

Om de mooie waarde van processen te bekijken met het ps-commando in door de gebruiker gedefinieerd formaat (hier toont de NI de kolom de aardigheid van processen).

ps -eo pid,ppid,ni,comm

Als alternatief kunt u top- of htop-hulpprogramma's gebruiken om de mooie waarden van Linux-processen te bekijken, zoals weergegeven.

top
htop

Verschil tussen PR of PRI en NI

Uit de bovenstaande uitvoer top en htop ziet u dat er een kolom is met de naam PR en PRI receptief die de prioriteit van een proces laat zien.

Dit betekent dus dat:

  • NI – is de mooie waarde, een concept voor gebruikersruimte, while
  • PR of PRI – is de werkelijke prioriteit van het proces, zoals gezien door de Linux-kernel.
Hoe PR- of PRI-waarden te berekenen
Total number of priorities = 140
Real time priority range(PR or PRI):  0 to 99 
User space priority range: 100 to 139

Mooi waardebereik (NI): -20 tot 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.

Maar als u een rt ziet in plaats van een getal, zoals weergegeven in de onderstaande schermafbeelding, betekent dit in feite dat het proces wordt uitgevoerd met realtime planningsprioriteit.

Hoe u een opdracht uitvoert met een gegeven Nice-waarde in Linux

Hier zullen we bekijken hoe we prioriteit kunnen geven aan het CPU-gebruik van een programma of opdracht. Als u een zeer CPU-intensief programma of taak heeft, maar u begrijpt ook dat het lang kan duren om deze te voltooien, kunt u er een hoge of gunstige prioriteit aan geven met behulp van het nice commando.

De syntaxis is als volgt:

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]

Belangrijk:

  • Als er geen waarde wordt opgegeven, stelt nice standaard een prioriteit van 10 in.
  • Een opdracht of programma dat zonder problemen wordt uitgevoerd, heeft standaard een prioriteit van nul.
  • Alleen root kan een opdracht of programma met verhoogde of hoge prioriteit uitvoeren.
  • Normale gebruikers kunnen alleen een opdracht of programma met een lage prioriteit uitvoeren.

In plaats van een programma of opdracht met de standaardprioriteit te starten, kunt u het bijvoorbeeld met een specifieke prioriteit starten door de volgende mooie opdracht te gebruiken.

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

Je kunt ook de derde methode gebruiken, die een beetje verwarrend is, vooral voor negatieve aardigheidswaarden.

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

Wijzig de planningsprioriteit van een proces in Linux

Zoals we eerder vermeldden, maakt Linux dynamische, op prioriteit gebaseerde planning mogelijk. Als een programma al actief is, kunt u de prioriteit ervan wijzigen met het renice-commando in deze vorm:

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

Uit de onderstaande boven voorbeelduitvoer blijkt dat de aardigheid van de teamspe+ met PID 1055 nu -12 is en voor iedereen processen die eigendom zijn van gebruiker apache zijn -2.

Als je deze uitvoer nog steeds gebruikt, zie je dat de formule PR=20 + NI staat,

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

Alle wijzigingen die u met renice command aanbrengt in de mooie waarden van de processen van een gebruiker zijn alleen van toepassing tot de volgende herstart. Lees het volgende gedeelte om permanente standaardwaarden in te stellen.

Hoe u de standaard Nice-waarde van de processen van een specifieke gebruiker instelt

U kunt de standaard nice-waarde van een bepaalde gebruiker of groep instellen in het bestand /etc/security/limits.conf. De primaire functie ervan is het definiëren van de resourcelimieten voor de gebruikers die zijn ingelogd via PAM.

De syntaxis voor het definiëren van een limiet voor een gebruiker is als volgt (en de mogelijke waarden van de verschillende kolommen worden uitgelegd in het bestand):

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

Gebruik nu de onderstaande syntaxis waarbij hard – het afdwingen van harde links betekent en zacht – het afdwingen van de zachte limieten.

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

U kunt ook een bestand maken onder /etc/security/limits.d/ dat de instellingen in het bovenstaande hoofdbestand overschrijft, en deze bestanden worden in alfabetische volgorde gelezen.

Begin met het maken van het bestand /etc/security/limits.d/tecmint-priority.conf voor gebruiker tecmint:

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

Voeg vervolgens deze configuratie eraan toe:

tecmint  hard  priority  10

Sla het bestand op en sluit het. Vanaf nu heeft elk proces dat eigendom is van tecmint een mooie waarde van 10 en PR van 30.

Lees voor meer informatie de manpagina's van nice en renice:

man nice
man renice 

Misschien wilt u ook de volgende artikelen over Linux-procesbeheer lezen.

  1. Hoe u lopende processen in Linux kunt vinden en beëindigen
  2. Een gids voor Kill-, Pkill- en Killall-opdrachten om een proces in Linux te beëindigen
  3. Hoe u systeemgebruik en storingen kunt monitoren en problemen met Linux-servers kunt oplossen
  4. CPUTool - Beperk en beheer het CPU-gebruik van elk proces in Linux

In dit artikel hebben we kort de kernelplanner en procesprioriteit uitgelegd, gekeken hoe je een programma of opdracht met gewijzigde prioriteit kunt uitvoeren en ook de prioriteit van actieve Linux-processen kunt wijzigen. Via het onderstaande feedbackformulier kunt u uw mening over dit onderwerp delen.