Upravljanje procesima na serveru baziranom na Linux operativnom sustavu

U prethodnom članku Nadzor rada servera baziranog na Linux operativnom sustavu  spomenuli smo nekoliko načina na koji možete pratiti rad sustava, potrošnju resursa i sl. Sada ćemo se malo detaljnije osvrnuti na konkretne načine kojima je moguće upravljati procesima koji se izvršavaju na Linux računalu ili serveru.
Svaki server pokreće više istovremenih aplikacija i svaku pokrenutu aplikaciju nazivamo proces. To može biti aplikacija za posluživanje web stranica, za slanje email poruka, upravljanje bazom podatka, i sl. U samom operativnom sustavu ugrađeno je nekoliko standardnih alata za praćenje i upravljanje procesima.

 

  1. Provjera pokrenutih procesa

Sve procese koji se trenutno izvršavaju na serveru možemo provjeriti naredbom top koja će na izlistati neke osnove statistike kao i listu procesa u realnom vremenu:

Prvih nekoliko linija prikazuje nam statistiku sistema, kao što je opterećenje CPU-a, zauzeće memorije te broj pokrenutih procesa/zadataka.

Iz ovih podatka možemo vidjeti da se trenutno izvršavaju 3 proces, a 237 procesa je na “spavanju” budući da trenutno ne koriste aktivno CPU.

U nastavku prikaza vidimo procese koji su trenutno pokrenuti te statistiku koliko kojih serverskih resursa oni troše.

Prikaz procesa zadano je sortiran prem %CPU stupcu, gdje su procesi sa najvećom potrošnjom na vrhu prikaza.

  • Tipkom ”d” možemo promijeniti brzinu osvježavanja sa zadane 3 sekunde na više ili manje.
  • Tipkom “c” možemo promijeniti prikaz pokrenute naredbe, između samo naziva naredbe ili pune konfiguracije pokrenute naredbe.
  • Tipkom “k” možemo poslati signal nekom procesu, npr. zaustaviti ga, standardno će biti ponuđen prvi proces u popisu, sa tipkom “Enter” potvrdimo broj ponuđenog procesa ili upišemo PID procesa kojem želimo poslati signal, zatim upišemo broj signala koji šaljemo, npr. sa tipkom “Enter” potvrdimo ponuđeni signal 15 za normalno zaustavljanje procesa ili upišemo broj 9 za prisilno zaustavljanje procesa.
  • Tipkama “<” i ”>” možemo mijenjati sortiranje procesa između ponuđenih stupaca.
  • Tipkom “W” spremamo podešenu konfiguraciju top aplikacije, tako da nam se kod sljedećeg pokretanja automatski starta sa željenim postavkama.
  • Tipkom “q” izlazimo iz top aplikacije.

 

Naprednija verzija top aplikacije je htop. Dostupna je u repozitorijima gotovo svih Linux operativnih sustava i ako je već nemate instaliranu, možete je instalirat naredbom:

sudo apt install htop” ili “sudo dnf install htop

Vizualno nam na ljepši način prikazuje pokrenute procese, ima bolju podršku za prikaz boja u modernim terminalima, više opcija sortiranja, podršku za prikazu izvršavanja po CPU jezgra. Isto kao i top aplikacija, i htop nam prikazuje statistiku pokrenutih procesa.

  • Tipkom “M” možemo sortirati prikaz po zauzeću memorije
  • Tipkom “P” možemo sortirati prikaz po zauzeću CPU-a
  • Tipkom “T” možemo sortirati prikaz po korištenju vremena
  • Tipkama “↑” i “↓” označujemo proces u prikazu svih pokrenutih procesa
  • Tipkom “k” i odabirom signala možemo npr. zaustaviti označeni proces
  • Tipkom “/” možemo pretraživati procese
  • Tipkom “F2” otvaramo postavke prikaza aplikacije
  • Tipkom “?” otvaramo pomoć za korištenje
  • Tipkom “q” izlazimo iz aplikacije

Preporučamo da proučite pomoć za korištenje aplikacije (tipka “?”) jer će vam svakako znatno olakšati korištenje ove moćne aplikacije.

  1. Pregled procesa naredbom ps

Osim top i htop aplikacija koje nam prikazuju pokrenute procese slično kao i grafički “task manager”, naredba ps omogućuje nam pregled procesa na način da ih ispiše direktno na ekran. Ovakav način pregleda procesa omogućava nam mnoge druge radnje nad pokrenutim procesima.

Pokretanjem naredbe ps aplikacija će nam ispisati nekoliko kratkih informacija:

Prikazane informacije vezane su za trenutno pokrenutu terminal sesiju te prijavljenog korisnika. Da bi dobili detaljnije podatke o tome koji procesi su trenutno pokrenuti na serveru, koristit ćemo naredbu ps sa opcijama aux

Upisane opcije aux određuju koje sve podatke i na koji način će nam aplikacija ps vratiti natrag na ekran.

Procese koji se trenutno pokreću možemo pretraživati korištenjem naredbe ps i grep.

Ovo nam može pomoći kada želimo saznati da li je neki proces pokrenut ili želimo provjeriti pod kojim PID brojem se izvršava, i sl.

Naredba nam je sada vratila podatke procesa koji smo tražili kao što je korisnik pod koji se proces pokreće, PID broj procesa, zauzeće memorije i cpu-a tog procesa, vrijeme koliko dugo je proces pokrenut i sl. Također prikazana je i sama grep naredba kroz koju smo tražili proces “lfd”.

Većinu upravljanja nekim procesom možemo raditi pomoću PID broja tog procesa.

U ovom našem primjeru PID broj procesa “lfd” je 268114.

PID broj nekog procesa možemo dobiti i putem naredbe pgrep:

Aplikacije top, htop i ps također će nam uz svaki proces prikazivati i njihov PID broj budući da komunikacija između korisnika i operativnog sustava uključuje interakciju između naziva procesa i PID brojeva tijekom razno raznih operacija.

  1. Slanje signala prema pokrenutom procesu

Signali su način na koji operativni sustav govori aplikacijama da završe sa izvršavanjem ili da promijeni njihov tijek izvođenja. Svaki proces odgovara na neki način na signal koji mu je poslan.

Najčešći način slanja signala nekom procesu je putem naredbe kill iza koje slijedi PID broj procesa. Prema samom nazivu, naredba kill poslat će signal za zaustavljanje procesa.

U primjeru našeg procesa “lfd”, poslan je naredba “kill 268114” kojom smo prema procesu poslali signal “-15” ili “TERM” te zatražili od procesa da završi sa izvođenjem. Slanjem signala “TERM” na lijep način smo od procesa zatražili da počisti za sobom i da završi sa izvođenjem.

Po završetku izvođenja procesa, ponovno smo startali proces “lfd” i provjerom sa naredbom pgrep vidimo da sada ima novi PID broj 730203.

U slučaju da se proces ponaša čudno, ne reagira i ne zaustavlja slanjem signala “-15” ili “TERM”, tada imamo na raspolaganju signal “-9” ili “KILL” koji na prisilan način zaustavlja izvođenje procesa. Navedeni signal naredba kill ne šalje prema procesu, već prema kernelu operativnog sustava koji prisilno zaustavlja proces pod PID brojem.

Osim zaustavljanja procesa, signalima možemo i upravljati procesima na način da od njih zatražimo restart. Pa ćemo tako npr. slanjem signala “-1” ili “HUP” prema Apache httpd servisu zatražiti od njega da iznova učita konfiguraciju i nastavi s posluživanjem sadržaja. Signal “-1” ili “HUP” najčešće restarta pozadinske servise, dok se klasične aplikacije zaustavljaju.

Popis svih signala koje naredba kill može poslati možemo izlistati sa naredbom kill -l

Drugi način na koji možemo poslati neki signal prema procesu je korištenjem naredbe pkill.

Naredba pkill radi na isti način kao i naredba kill, jedino umjesto PID broja procesa, navodimo naziv procesa.

U primjeru našeg “lfd” procesa to bi izgledalo ovako:

Provjera procesa lfd vraća da proces ima PID broj 730203. Zatim smo poslali “TERM” signal putem pkill naredbe prema procesu naziva “lfd”. Provjera kroz naredbu ps vraća da “lfd” proces više ne postoji. Nakon ponovnog pokretanja “lfd” procesa, pgrep provjera vraća da “lfd” proces sada ima PID broj 829248.

Jedan od načina kako još možemo poslati neki signal prema procesu je kombinacijom kill i pgrep naredbe. Npr. kill ‘pgrep lfd’ što bi bilo ekvivalent naredbe kill 829248

U slučaju da imamo potrebu istovremeno završiti izvođenje više istovjetnih procesa, koristit ćemo naredbu killall. Npr. killall chrome kojom ćemo poslati “TERM” signal svim procesima naziva “chrome”.

  1. Prioriteti izvođenja procesa

Ako CPU ima n jezgri onda može paralelno izvršavati samo n procesa. Kada je broj procesa veći od n, procesi se izmjenjuju vrlo brzo pomoću naprednih mehanizama za prebacivanje konteksta kako bi se omogućila višezadaćnost. To nam omogućuje pokretanje više istovremenih procesa na CPU-u čak i ako ima samo 1 jezgru.

Kako CPU odlučuje koji će proces imati viši prioritet u izvođenju od nekog drugog procesa? Linux kontrolira prioritet izvođenja procesa putem vrijednosti naziva “niceness“. Neki se procesi mogu smatrati ključnima za vašu situaciju, dok se drugi mogu izvršiti kad server na raspolaganju ima nekih neiskorištenih resursa.

Procesi sa visokim prioritetom izvršavanja smatraju se “less nice” manje lijepima jer ne dijele resurse. Dok s druge strane imamo procese sa niskim prioritetom izvršavanja, koji se smatraju “nice” lijepima, jer inzistiraju na korištenju minimalnih resursa za svoje izvršavanje.

Ako ponovno provjerimo aplikaciju top, među stupcima statistike procesa vidimo i stupac sa oznakom “NI”. Navedeni stupac prikazuje nam “nice” prioritet svakog od procesa:

Nice” vrijednost može varirati između -19/-20 (najviši prioritet) i 19/20 (najniži prioritet), ovisno o sustavu.

Putem aplikacije top, možemo promijeniti prioritet nekog procesa koji je već pokrenut.

Tipkom “r” odabiremo PID procesa te zatim navodimo prioritet koji mu želimo dodijeliti.

Kada odmah želimo pokrenuti neki proces sa određenim prioritetom, koristit ćemo naredbu:
nice -n -10 top

U ovo primjeru pokrenuli smo aplikaciju top sa predpodešenim prioritetom izvršavanja na -10.

Kada već imamo pokrenuti neki proces, osim putem sučelja aplikacije top, prioritet procesa možemo promijeniti korištenjem naredbe renice.

Npr. renice 15 PID, gdje kao PID upisujemo PID broj procesa. Drugi način je kombinacijom renice i pgrep naredbe, npr. renice 15 ‘pgrep top’

U ovom primjeru promijenili smo prioritet procesa top sa inicijalnih -10 na 15.

Kraj

Upravljanje procesima temeljni je dio Linuxa koji je koristan u gotovo svakom kontekstu. Čak i ako ne obavljate nikakvu praktičnu administraciju sustava, mogućnost praćenja zaglavljenih procesa i pažljivo rukovanje njima od velike je pomoći.

Povezani članci

Odgovori