Hvordan sette Linux-prosessprioritet ved å bruke fine og renice-kommandoer


I denne artikkelen vil vi kort forklare kjerneplanleggeren (også kjent som prosessplanleggeren) og prosessprioritet, som er emner utenfor denne veiledningen. Deretter vil vi dykke ned i en liten bit av Linux-prosessadministrasjon: se hvordan du kjører et program eller kommando med modifisert prioritet og endrer også prioriteten for å kjøre Linux-prosesser.

Les også: Slik overvåker du Linux-prosesser og setter prosessgrenser per bruker

En kjerneplanlegger er en enhet av kjernen som bestemmer den mest passende prosessen av alle kjørbare prosesser som skal utføres neste gang; den tildeler prosessortid mellom de kjørbare prosessene på et system. En kjørbar prosess er en som bare venter på CPU-tid, den er klar til å bli utført.

Planleggeren utgjør kjernen i multitasking i Linux, ved å bruke en prioritetsbasert planleggingsalgoritme for å velge mellom de kjørbare prosessene i systemet. Den rangerer prosesser basert på de mest fortjente samt behovet for CPU-tid.

Kjernen lagrer mye informasjon om prosesser inkludert prosessprioritet som ganske enkelt er planleggingsprioriteten knyttet til en prosess. Prosesser med høyere prioritet vil bli utført før de med lavere prioritet, mens prosesser med samme prioritet planlegges etter hverandre, gjentatte ganger.

Det er totalt 140 prioriteter og to distinkte prioritetsområder implementert i Linux. Den første er en fin verdi (hyggelighet) som varierer fra -20 (høyeste prioritetsverdi) til 19 (laveste prioritetsverdi) og standardverdien er 0, dette er hva vi vil avdekke i denne veiledningen. Den andre er sanntidsprioriteten, som varierer fra 1 til 99 som standard, deretter er 100 til 139 ment for brukerplass.

Et viktig kjennetegn ved Linux er dynamisk prioritetsbasert planlegging, som gjør at verdien av prosesser kan endres (økes eller reduseres) avhengig av dine behov, som vi vil se senere.

Hvordan sjekke verdien av Linux-prosesser

For å se de fine verdiene til prosesser kan vi bruke verktøy som htop.

For å vise prosesser fin verdi med ps-kommando i brukerdefinert format (her NI viser kolonnen hvor hyggelige prosesser er).

$ ps -eo pid,ppid,ni,comm

Alternativt kan du bruke topp- eller htop-verktøy for å se gode verdier for Linux-prosesser som vist.

$ top
$ htop

Fra topp- og htop-utgangene ovenfor, vil du legge merke til at det er en kolonne kalt PR og PRI mottakelig som viser prioriteten til en prosess.

Dette betyr derfor at:

  • NI – er den fine verdien, som er et konsept for brukerplass, mens
  • PR eller PRI – er prosessens faktiske prioritet, sett av Linux-kjernen.

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

Hyggelig verdiområde (NI): -20 til 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.

Men hvis du ser en rt i stedet for et tall som vist på skjermbildet nedenfor, betyr det i utgangspunktet at prosessen kjører under sanntids planleggingsprioritet.

Hvordan kjøre en kommando med en gitt god verdi i Linux

Her skal vi se på hvordan du prioriterer CPU-bruken til et program eller en kommando. Hvis du har et veldig CPU-intensivt program eller oppgave, men du også forstår at det kan ta lang tid å fullføre, kan du sette det en høy eller gunstig prioritet ved å bruke nice-kommandoen.

Syntaksen er som følger:

$ 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]

Viktig:

  • Hvis ingen verdi er oppgitt, setter nice en prioritet på 10 som standard.
  • En kommando eller et program kjøres uten fine standardverdier til en prioritet på null.
  • Bare root kan kjøre en kommando eller et program med økt eller høy prioritet.
  • Vanlige brukere kan bare kjøre en kommando eller et program med lav prioritet.

For eksempel, i stedet for å starte et program eller en kommando med standardprioritet, kan du starte den med en bestemt prioritet ved å bruke følgende fine kommando.

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

Du kan også bruke den tredje metoden som er litt forvirrende spesielt for negative hyggelighetsverdier.

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

Endre planleggingsprioriteten til en prosess i Linux

Som vi nevnte før, tillater Linux dynamisk prioritetsbasert planlegging. Derfor, hvis et program allerede kjører, kan du endre prioritet med renice-kommandoen i dette skjemaet:

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

Fra eksemplet øverste utgang nedenfor, er hyggeligheten til teamspe+ med PID 1055 nå -12 og for alle prosesser som eies av brukeren apache er -2.

Fortsatt å bruke denne utgangen, kan du se formelen PR = 20 + NI står,

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

Eventuelle endringer du gjør med renice-kommandoen til en brukers prosesser fine verdier, gjelder kun til neste omstart. For å angi permanente standardverdier, les neste avsnitt.

Hvordan angi standard god verdi for en spesifikk brukers prosesser

Du kan angi standard nice-verdien for en bestemt bruker eller gruppe i filen /etc/security/limits.conf. Dens primære funksjon er å definere ressursgrensene for brukerne som er logget på via PAM.

Syntaksen for å definere en grense for en bruker er som følger (og de mulige verdiene for de forskjellige kolonnene er forklart i filen):

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

Bruk nå syntaksen nedenfor der hard – betyr å håndheve harde lenker og myke betyr – håndheve de myke grensene.

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

Alternativt kan du opprette en fil under /etc/security/limits.d/ som overstyrer innstillingene i hovedfilen ovenfor, og disse filene leses i alfabetisk rekkefølge.

Start med å lage filen /etc/security/limits.d/tecmint-priority.conf for brukeren tecmint:

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

Legg deretter til denne konfigurasjonen i den:

tecmint  hard  priority  10

Lagre og lukk filen. Fra nå av vil enhver prosess som eies av tecmint ha en fin verdi på 10 og PR på 30.

For mer informasjon, les man-sidene til nice and renice:

$ man nice
$ man renice 

Du vil kanskje også lese disse følgende artiklene om Linux-prosessbehandling.

  1. Hvordan finne og drepe kjørende prosesser i Linux
  2. En guide til Kill-, Pkill- og Killall-kommandoer for å avslutte en prosess i Linux
  3. Hvordan overvåke systembruk, driftsstans og feilsøke Linux-servere
  4. CPUTool – Begrens og kontroller CPU-bruk av enhver prosess i Linux

I denne artikkelen forklarte vi kort kjerneplanleggeren, prosessprioritet, så på hvordan du kjører et program eller kommando med modifisert prioritet og endrer også prioriteten til aktive Linux-prosesser. Du kan dele eventuelle tanker om dette emnet via tilbakemeldingsskjemaet nedenfor.