Hvordan begrense CPU -bruken av en prosess på Linux

Hvordan begrense CPU -bruken av en prosess på Linux
I din Linux-levetid må du ha sett noen prosesser ta opp alle CPU-syklusene (90-99% CPU-bruk), noe som gjør datamaskinen nesten ikke svarer til den er ferdig. Det kan være i orden hvis prosessen tar noen sekunder å fullføre. Men hva om det tar lang tid? Det er ikke veldig hyggelig å sitte og se på den ikke -svarende datamaskinen din i minutter og timer, ikke sant? Vel, Linux har mange fantastiske verktøy for å lage disse ikke veldig snilt prosesser til hyggelig prosesser.

Du kan angi hvor mye CPU en enkelt prosess er tillatt å ha. Hvis prosessen virkelig trenger mye CPU -kraft, kan du kjøre noen få kommandoer for å gi den alle ledige CPU -sykluser (CPU -sykluser som du ikke trenger). På den måten trenger du aldri å sitte og stirre på din ikke -svarende datamaskin på lenge.

I denne artikkelen vil jeg vise deg hvordan du kan begrense CPU -bruken av en prosess på Linux. Jeg skal bruke Centos 7 i denne artikkelen. Men enhver moderne Linux -distribusjon skal fungere. Så la oss komme i gang.

Begrensning av CPU -bruk med Nice and Renice:

På Linux kan prioriteringene til hver løpsprosess endres. Du kan sette høyere prioriteringer til prosessen som er viktigere for deg enn en prosess som hogger CPU -en din uten god grunn.

Hver prosess på Linux har en fin verdi. Verdien av NICE bestemmer hvilken prosess som har høyere prioriteringer og som har lavere. Fin verdi kan være mellom -20 til 19. En prosess med den fine verdien på -20 vil ha høyest prioritet og vil bruke flest CPU -sykluser. En prosess med fin verdi 19 vil ha lavest prioritet og vil bruke CPU når ingen andre prosesser bare bruker den.

Det er to måter å sette den fine verdien av en prosess. Du kan enten starte en prosess med hyggelig kommando for å sette en fin verdi mens du starter prosessen. Eller du kan bruke Renice Kommando for å sette en fin verdi etter at en prosess har startet.

For å sette en fin verdi når du starter en prosess, kjører du prosessen som følger:

$ fin -n nice_value command_to_run

MERK: Her Fin_value kan være alt fra -20 til 19 og Kommando_to_run er enhver kommando du vil kjøre med den fine verdien av Fin_value.

La oss for eksempel si, du vil kjøre sove kommando med den fine verdien av 14. Kjør kommandoen som følger:

$ fin -n 14 Sleep 40000 &

Nå kan du bekrefte om den fine verdien er satt riktig ved å bruke toppkommandoen. Du kan liste opp alle prosessene du startet (som påloggingsbruker) med følgende kommando:

$ ps -fl

Som du kan se, er den fine verdien av prosessen satt til 14.

Hvis du nå ønsker å endre den fine verdien av de eksisterende prosessene dine, er alt du trenger prosess -ID (PID) for prosessen du vil endre den fine verdien. Du kan bruke PS aux kommando eller topp kommando for å finne prosess -ID eller PID.

Da kan du løpe Renice Kommando som følger for å endre den fine verdien av en eksisterende prosess:

$ sudo renice -n new_nice_value -p prosess_pid

Som du kan se, endres den fine verdien av prosessen med PID 6422.

Begrensende CPU -bruk med CGroups:

Den fulle formen for Cgroups er COntrol GRokker. Det er en Linux -kjernefunksjoner som brukes til å begrense ressurser for å behandle grupper som (CPU, minne, tillatelser og mange flere) på Linux.

Alt du trenger å gjøre er å lage en ny prosessgruppe og legge til prosessene dine som du vil begrense ressursene til, til den gruppen. Enkel!

CGroups Management Tools er ikke installert på CentOS 7 som standard. Men det er tilgjengelig i det offisielle pakkelagde av CentOS 7.

Oppdater først Yum Package Repository Cache med følgende kommando:

$ sudo yum makecache

Installer nå CGroups Management Tools med følgende kommando:

$ sudo yum installer libcgroup-tools

Trykk nå y Og trykk deretter .

Det skal installeres.

Du kan begrense CPU -bruken av en enkelt gruppe. For eksempel kan du bruke CGroups til å fortelle en prosess i en CGroup for å bruke, la oss si 100 ms av hver 1000ms (eller .1s ut av hver 1) av CPU -tiden.

Opprett først en CGroup med følgende kommando:

$ sudo cgcreate -g cpu:/cpulimit

MERK: Her, cpulimit er gruppenavnet som kontrollerer prosessor bruk.

Nå må du stille prosessor.CFS_PERIOD_US og prosessor.CFS_QUOTA_US eiendom på cpulimit gruppe.

For dette eksemplet bør 1000 ms (millisekunder) eller 1000000US (mikrosekunder) settes til prosessor.CFS_PERIOD_US Eiendom og 100 ms eller 100000US skal settes til prosessor.CFS_QUOTA_US eiendom.

Kjør følgende kommandoer for å sette disse egenskapene til cpulimit gruppe:

$ sudo cgset -r CPU.CFS_PERIOD_US = 1000000 CPULIMIT
$ sudo cgset -r CPU.CFS_QUOTA_US = 100000 CPULIMIT

Nå kan du kjøre følgende kommando for å sjekke om alle egenskapene er riktig angitt:

$ sudo cgget -g cpu: cpulimit

MERK: Her, cpulimit er navnet på CGroup og prosessor er ressursen jeg begrenser.

Som du kan se, prosessor.CFS_PERIOD_US og prosessor.CFS_QUOTA_US er riktig satt.

Nå hvilken prosess du legger til cpulimit Cgroup vil bruke 1/10th (100000/1000000 = 1/10 = 0.1 = 10%) av de totale CPU -syklusene.

Nå for å begrense CPU for en prosess, start programmet eller kommandoen med CGEXEC følgende:

$ sudo cgexec -g cpu: cpulimit your_command

MERK: Her, Din_command kan være noen gyldige Linux -kommandoer.

For å bevise at det faktisk fungerer, skal jeg først kjøre følgende kommando uten CGroups og deretter med CGroups og vise deg resultatene.

$ dd if =/dev/null av = out bs = 1m

Som du kan se, uten CGroups, bruker kommandoen 90% av den totale CPU -en.

Deretter kjørte jeg den samme kommandoen med CGroups som følger:

$ sudo cgexec -g cpu: cpulimit dd if =/dev/null av = out bs = 1m

Som du ser er CPU -bruken 10% maksimalt. Prosessen bruker ikke mer enn det.

Så det er slik du bruker CGroups for å begrense CPU -bruken av en prosess på Linux. Takk for at du leste denne artikkelen.

Referanser:

[1] https: // tilgang.Rød hatt.com/dokumentasjon/en-us/red_hat_enterprise_linux/6/html/resource_management_guide/sec-cpu

[2] https: // linux.dø.nett/mann/1/fin

[3] https: // linux.dø.nett/mann/8/renice