Control Process CPU-brug med nice og cpulimit [Linux]
Uanset hvor hurtigt din Linux-maskine er, vil der altid være nogle opgaver, der spiser meget CPU-tid. Alt fra videokodning til kørende matematiske modeller kan få CPU'en til at køre ved 100%. Det er fint, hvis maskinen ikke laver noget andet. Men hvis det er dit primære skrivebord eller det bruges som en server, så kører en opgave, der maksimerer din CPU, at maskinen bliver træg og svært at bruge. Skønheden i et multitasking-operativsystem er, at maskinen ikke fryser, da det altid planlægger CPU-tid til andre opgaver, og ting som skrivebordet vil stadig arbejde, men meget langsommere. Planlæggeren har ingen måde at vide, at du ønsker, at CPU-intensiv opgave skal køre med en lavere prioritet eller for at begrænse CPU-tiden. Men der er nogle værktøjer, som kan bruges til at styre proces-CPU-brug for disse ressource hungrige opgaver.
For at efterligne en CPU-intensiv opgave kan vi bruge et værktøj kaldet matho-prime
der genererer en liste over primtal. Hvis du beder om at generere en stor nok liste, vil det maksimere CPU'en, mens den arbejder. For at installere matho-prime
på Ubuntu eller på en Raspberry Pi brug:
sudo apt-get install matematisk-primes
Lad os bare starte opgaven og se CPU-brugen:
matho-primes 0 9999999999> p.txt &
Dette fortæller matho-primes
at generere en liste over primater fra nul til ni milliarder ni hundrede nioghalvfems millioner ni hundrede nioghalvfems tusinde ni hundrede og nioghalvfems! Udgangen omdirigeres til filen p.txt
. Ampersand i slutningen fortæller skallen at køre programmet i baggrunden, hvilket betyder at du vender tilbage til kommandoprompten lige efter start af opgaven.
Kør nu top
kommando og bemærk, hvor stor en CPU der bruges af primalletgeneratoren.
Lad os nu dræbe den opgave og se på, hvordan vi kan starte det med en lavere prioritet. Afslut top
ved at trykke på q
, og skriv derefter fg
at bringe matho-primes
til forgrunden og tryk derefter på "Ctrl + C" for at tvinge programmet til at gå ud.
Start nu programmet igen, men i begyndelsen af kommandoen tilføj ordet nice
:
dejlige matho-primes 0 9999999999> p.txt &
nice
er et værktøj, der fortæller Linux at planlægge denne opgave med en lavere prioritet. Niceness spænder fra -20 (mest gunstige planlægning) til 19 (mindst gunstige). Som standard vil nice
planlægge opgaven med en pænhed på 10. Som standard startes normale opgaver med en nøjagtighed på nul. Det betyder, at en opgave med en pænhed på 10 vil blive betragtet som en lavere prioritet og vil få CPU ressourcer mindre ofte.
Vi kan nu starte en anden af disse primtalgeneratorer til at efterligne andre opgaver, du vil gøre på din maskine (f.eks. Webbrowsing eller skrivning af et dokument). Denne vil have en normal niceness, da brug af skrivebordet skal have en større prioritet end at køre prime nummergeneratoren.
matho-primes 0 9999999999> p2.txt &
Bemærk, at output fra denne fil omdirigeres til p2.txt
. Udgangen fra top
vil se sådan ud:
Som du kan se, får processen med den højere niceness mindre CPU-tid. Det betyder, at hvis du starter en CPU-intensiv opgave med det, vil det ikke få din maskine til at blive svag eller få det til at reagere langsomt.
cpulimit
Der er en anden kommando kaldet "cpulimit", som i stedet for at ændre planlægningsprioriteten, midlertidigt pauser en proces for at sikre, at den ikke overstiger den ønskede CPU-brug.
For at installere det skal du skrive:
sudo apt-get install cpulimit
Kør nu CPU-intensiv prime nummergeneratoren igen og bemærk dens PID-nummer ved hjælp af denne kommando:
ps | grep matho-prime
Den første kolonne af output er PID. Begræns nu CPU-brugen af denne proces som denne:
sudo cpulimit -b-l 50-p 16299
Hvor 16299 er PID for matho-primes
processen. Et kig med top
viser noget som dette:
Går videre
Der er en ledsagende kommando til en nice
kaldet renice
som vil ændre nydigheden af en eksisterende proces. Forsøg at bruge top
eller ps
med grep
at få PID af en proces og brug renice +19 16299
at indstille prioriteten til det lavest mulige (hvor 16299 er procesens PID).
Du er velkommen til at tilføje i diskussionen i kommentaren nedenfor.