Kontroll Process CPU Användning Med bra och cpulimit [Linux]
Oavsett hur fort din Linux-maskin är, kommer det alltid att finnas några uppgifter som förbrukar mycket CPU-tid. Allt från videokodning till löpande matematiska modeller kan orsaka att CPU körs till 100%. Det här är bra om maskinen inte gör någonting annat. Men om det är ditt huvudsakliga skrivbord eller det används som en server kör du en uppgift som maximerar din CPU, vilket gör maskinen långsam och svår att använda. Skönheten hos ett multitasking operativsystem är att maskinen inte fryser eftersom det alltid ska schemalägga CPU-tid för andra uppgifter och saker som skrivbordet kommer fortfarande att fungera, men mycket långsammare. Schemaläggaren har ingen möjlighet att veta att du vill att CPU-intensiv uppgift ska köras med en lägre prioritet eller för att begränsa sin CPU-tid. Det finns dock några verktyg som kan användas för att styra processens CPU-användning för dessa resurs hungriga uppgifter.
För att emulera en CPU-intensiv uppgift kan vi använda ett verktyg som kallas matho-prime
som genererar en lista över primtal. Om du frågar det om att generera en tillräckligt stor lista kommer det att maximera CPU-enheten medan den fungerar. För att installera matho-prime
på Ubuntu eller på en Raspberry Pi-användning:
sudo apt-get installera matematiska-primes
Låt oss bara starta uppgiften och se CPU-användningen:
matho-primes 0 9999999999> p.txt &
Detta berättar att matho-primes
genererar en lista över primer från noll till nio miljarder nio hundra niofemio miljoner niohundra nittionio tusen nio hundra nittiofem! Utdatan omdirigeras till filen p.txt
. Ampersand i slutet berättar om att skalet ska köra programmet i bakgrunden vilket innebär att du returneras till kommandotolkningen direkt efter att du har startat uppgiften.
Kör nu det top
kommandot och märk hur mycket CPU som används av primtalgeneratorn.
Låt oss nu döda den uppgiften och titta på hur vi kan starta det med en lägre prioritet. Avsluta top
genom att trycka på q
, skriv sedan fg
för att matho-primes
i förgrunden och tryck sedan på "Ctrl + C" för att tvinga programmet att gå ut.
Starta programmet igen, men i början av kommandot lägg till ordet nice
:
fina mattepremier 0 9999999999> p.txt &
nice
är ett verktyg som berättar för Linux att schemalägga denna uppgift med lägre prioritet. Niceness varierar från -20 (mest gynnsamma schemaläggning) till 19 (minst gynnsamma). Som vanligt kommer schemaläggaren att schemalägga uppgiften med en finhet på 10. Som vanligt startas normala uppgifter med en nischhet av noll. Det betyder att en uppgift med en finhet på 10 kommer att ses som en lägre prioritet och kommer att ges CPU-resurser mindre ofta.
Vi kan nu starta en andra av dessa primtalgeneratorer för att emulera andra uppgifter som du vill göra på din maskin (som webbläsning eller skrivning av ett dokument). Den här kommer att ha en normal nischhet, eftersom skrivbordet borde ha högre prioritet än att köra primtalgeneratorn.
matho-primes 0 9999999999> p2.txt &
Observera att utmatningen från den här filen omdirigeras till p2.txt
. Utsignalen från top
kommer att se ut så här:
Som du kan se får processen med högre nischhet mindre CPU-tid. Det innebär att om du startar en CPU-intensiv uppgift med nice
, kommer det inte att göra din maskin trög eller orsaka att den svarar långsamt.
cpulimit
Det finns ett annat kommando som heter "cpulimit" som istället för att ändra planeringsprioritering, pausar det tillfälligt en process för att säkerställa att den inte överstiger den önskade CPU-användningen.
För att installera det skriver du:
sudo apt-get install cpulimit
Kör nu CPU-intensiv primtalgenerator igen och notera sitt PID-nummer med hjälp av det här kommandot:
ps | grep matho-prime
Den första kolumnen i utgången är PID. Begränsa nu CPU-användningen av processen så här:
sudo cpulimit-b-l 50-p 16299
Där 16299 är PID i matho-primes
processen. En titt med top
visar någonting så här:
Går längre
Det finns en följeslagare till nice
kallad renice
som kommer att förändra finheten i en befintlig process. Försöker använda top
eller ps
med grep
att få PID för en process och använd renice +19 16299
att ställa prioriteten till lägsta möjliga (var 16299 är processens PID).
Skriv gärna i diskussionen i kommentaren nedan.