Kako pratiti korištenje sustava, ispade i otkloniti probleme s Linux poslužiteljima - 9. dio


Iako je Linux vrlo pouzdan, mudri administratori sustava trebali bi pronaći način da cijelo vrijeme prate ponašanje i korištenje sustava. Osiguravanje radnog vremena što je moguće bliže 100% i dostupnost resursa kritične su potrebe u mnogim okruženjima. Ispitivanje prošlog i trenutnog statusa sustava omogućit će nam da predvidimo i najvjerojatnije spriječimo moguće probleme.

Predstavljamo certifikacijski program Linux Foundation

U ovom ćemo članku predstaviti popis nekoliko alata koji su dostupni u većini uzvodnih distribucija za provjeru statusa sustava, analizu prekida rada i rješavanje tekućih problema. Konkretno, od mnoštva dostupnih podataka, usredotočit ćemo se na CPU, prostor za pohranu i korištenje memorije, osnovno upravljanje procesima i analizu dnevnika.

Iskorištenje skladišnog prostora

U Linuxu postoje 2 dobro poznate naredbe koje se koriste za provjeru korištenja prostora za pohranu: df i du.

Prvi, df (što znači disk free), obično se koristi za izvješćivanje o ukupnom korištenju prostora na disku po sustavu datoteka.

Primjer 1: Izvještavanje o korištenju prostora na disku u bajtovima i formatu čitljivom za čovjeka

Bez opcija, df izvještava o upotrebi diskovnog prostora u bajtovima. Uz zastavu -h prikazat će iste informacije koristeći MB ili GB umjesto toga. Imajte na umu da ovo izvješće također uključuje ukupnu veličinu svakog datotečnog sustava (u 1-K blokovima), slobodan i dostupan prostor i točku montiranja svakog uređaja za pohranu.

df
df -h

To je svakako lijepo - ali postoji još jedno ograničenje koje može učiniti datotečni sustav neupotrebljivim, a to je nedostatak inodea. Sve datoteke u datotečnom sustavu preslikane su na inode koji sadrži njegove metapodatke.

Primjer 2: Provjera korištenja inodea od strane datotečnog sustava u formatu čitljivom za čovjeka s
df -hTi

možete vidjeti količinu iskorištenih i dostupnih inodeova:

Prema gornjoj slici, postoji 146 korištenih inodeova (1%) u /home, što znači da još uvijek možete kreirati 226K datoteka u tom datotečnom sustavu.

Primjer 3: Pronalaženje i/ili brisanje praznih datoteka i direktorija

Imajte na umu da vam može ponestati prostora za pohranu mnogo prije nego što ponestane inodeova, i obrnuto. Iz tog razloga morate pratiti ne samo iskorištenost prostora za pohranu, već i broj inodeova koje koristi datotečni sustav.

Koristite sljedeće naredbe za pronalaženje praznih datoteka ili direktorija (koji zauzimaju 0B) koji koriste inode bez razloga:

find  /home -type f -empty
find  /home -type d -empty

Također, možete dodati oznaku -delete na kraju svake naredbe ako također želite izbrisati te prazne datoteke i direktorije:

find  /home -type f -empty --delete
find  /home -type f -empty

Prethodnim postupkom izbrisane su 4 datoteke. Ponovno provjerimo broj korištenih/dostupnih čvorova u /home:

df -hTi | grep home

Kao što vidite, sada postoje 142 korištena inoda (4 manje nego prije).

Primjer 4: Ispitivanje korištenja diska prema direktoriju

Ako je korištenje određenog datotečnog sustava iznad unaprijed definiranog postotka, možete upotrijebiti du (skraćenica za disk usage) da saznate koje datoteke zauzimaju najviše prostora.

Primjer je dan za /var, koji se, kao što možete vidjeti na prvoj gornjoj slici, koristi sa svojih 67%.

du -sch /var/*

Napomena: možete se prebaciti na bilo koji od gornjih poddirektorija kako biste saznali što se točno nalazi u njima i koliko svaka stavka zauzima. Zatim možete upotrijebiti te podatke za brisanje nekih datoteka ako nisu potrebne ili za povećanje veličine logičkog volumena ako je potrebno.

Pročitajte također

  1. 12 korisnih “df” naredbi za provjeru prostora na disku
  2. 10 korisnih naredbi "du" za pronalaženje korištenja diska za datoteke i direktorije

Iskorištenje memorije i procesora

Klasični alat u Linuxu koji se koristi za izvođenje sveukupne provjere iskorištenosti CPU-a/memorije i upravljanja procesima je top command. Osim toga, vrh prikazuje prikaz pokrenutog sustava u stvarnom vremenu. Postoje i drugi alati koji se mogu koristiti za istu svrhu, kao što je htop, ali ja sam se odlučio za top jer se instalira izvan kutije u bilo kojoj distribuciji Linuxa.

Primjer 5: Prikaz trenutnog statusa vašeg sustava s vrhom

Za početak na vrh jednostavno upišite sljedeću naredbu u naredbeni redak i pritisnite Enter.

top

Ispitajmo tipični vrhunski izlaz:

U redovima od 1 do 5 prikazane su sljedeće informacije:

1. Trenutno vrijeme (20:41:32) i vrijeme rada (7 sati i 41 minuta). Samo je jedan korisnik prijavljen na sustav, a opterećenje je prosječno tijekom zadnjih 1, 5 odnosno 15 minuta. 0,00, 0,01 i 0,05 označavaju da je tijekom tih vremenskih intervala sustav bio u mirovanju 0% vremena (0,00: nijedan proces nije čekao CPU), zatim je bio preopterećen za 1% (0,01: prosječno 0,01 procesa čekali su CPU) i 5% (0,05). Ako je manji od 0 i što je manji broj (0,65, na primjer), sustav je bio u mirovanju 35% tijekom posljednjih 1, 5 ili 15 minuta, ovisno o tome gdje se pojavljuje 0,65.

2. Trenutno je u tijeku 121 proces (možete vidjeti kompletan popis u 6). Samo 1 od njih radi (u ovom slučaju na vrhu, kao što možete vidjeti u stupcu %CPU), a preostalih 120 čeka u pozadini, ali "spava" i ostat će u tom stanju dok ih ne pozovemo. Kako? To možete provjeriti otvaranjem mysql prompta i izvršavanjem nekoliko upita. Primijetit ćete kako se povećava broj pokrenutih procesa.

Alternativno, možete otvoriti web preglednik i otići na bilo koju stranicu koju poslužuje Apache i dobit ćete isti rezultat. Naravno, ovi primjeri pretpostavljaju da su obje usluge instalirane na vašem poslužitelju.

3. us (vrijeme pokretanja korisničkih procesa s nepromijenjenim prioritetom), sy (vrijeme pokretanja procesa jezgre), ni (vrijeme pokretanja korisničkih procesa s modificiranim prioritetom), wa (vrijeme čekanja na završetak I/O), hi (vrijeme potrošeno na servisiranje hardverskih prekida), si (vrijeme potrošeno na servisiranje softverskih prekida), st (vrijeme ukradeno od trenutnog vm-a od strane hipervizora – samo u virtualiziranim okruženjima).

4. Upotreba fizičke memorije.

5. Zamjena korištenja prostora.

Primjer 6: Provjera upotrebe fizičke memorije

Za pregled korištenja RAM memorije i swapa također možete koristiti naredbu free.

free

Naravno, također možete koristiti prekidače -m (MB) ili -g (GB) za prikaz istih informacija u obliku čitljivom za čovjeka:

free -m

U svakom slučaju, morate biti svjesni činjenice da kernel rezervira što više memorije i stavlja je na raspolaganje procesima kada oni to zatraže. Konkretno, redak “-/+ međuspremnici/predmemorija” prikazuje stvarne vrijednosti nakon što se ovaj I/O predmemorija uzme u obzir.

Drugim riječima, količina memorije koju koriste procesi i količina dostupna drugim procesima (u ovom slučaju, 232 MB iskorišteno i 270 MB dostupno). Kada procesi trebaju ovu memoriju, kernel će automatski smanjiti veličinu I/O predmemorije.

Pročitajte također: 10 korisnih "besplatnih" naredbi za provjeru korištenja memorije u Linuxu

Pogled izbliza na procese

U svakom trenutku postoji mnogo procesa koji se izvode na našem Linux sustavu. Postoje dva alata koja ćemo koristiti za pažljivo praćenje procesa: ps i pstree.

Primjer 7: Prikaz cijelog popisa procesa u vašem sustavu pomoću ps (puni standardni format)

Korištenjem opcija -e i -f spojenih u jednu (-ef) možete popisati sve procese koji se trenutno izvode na vašem sustavu. Ovaj izlaz možete prenijeti na druge alate, kao što je grep (kao što je objašnjeno u 1. dijelu serije LFCS) da suzite izlaz na željeni proces(e):

ps -ef | grep -i squid | grep -v grep

Gornji popis procesa prikazuje sljedeće informacije:

vlasnik procesa, PID, roditeljski PID (nadređeni proces), iskorištenost procesora, vrijeme kada je naredba pokrenuta, tty (? označava da je demon), kumulirano CPU vrijeme i naredba povezana s procesom.

Primjer 8: Prilagodba i sortiranje izlaza ps

Međutim, možda vam ne trebaju sve te informacije, a željeli biste prikazati vlasnika procesa, naredbu koja ga je pokrenula, njegov PID i PPID i postotak memorije koju trenutno koristi – tim redoslijedom i poredajte po korištenje memorije silaznim redoslijedom (imajte na umu da je ps prema zadanim postavkama sortiran po PID-u).

ps -eo user,comm,pid,ppid,%mem --sort -%mem

Gdje znak minus ispred %mem označava sortiranje u silaznom redoslijedu.

Ako iz nekog razloga proces počne uzimati previše sistemskih resursa i vjerojatno će ugroziti cjelokupnu funkcionalnost sustava, poželjet ćete zaustaviti ili pauzirati njegovo izvršenje prosljeđujući mu jedan od sljedećih signala pomoću kill programa. Drugi razlozi zašto biste ovo razmotrili je kada ste započeli proces u prednjem planu, ali ga želite pauzirati i nastaviti u pozadini.

Signal name Signal number Description
 SIGTERM 15  Kill the process gracefully.
 SIGINT 2  This is the signal that is sent when we press Ctrl + C. It aims to interrupt the process, but the process may ignore it.
 SIGKILL 9  This signal also interrupts the process but it does so unconditionally (use with care!) since a process cannot ignore it.
 SIGHUP 1  Short for “Hang UP”, this signals instructs daemons to reread its configuration file without actually stopping the process.
 SIGTSTP 20  Pause execution and wait ready to continue. This is the signal that is sent when we type the Ctrl + Z key combination.
 SIGSTOP 19  The process is paused and doesn’t get any more attention from the CPU cycles until it is restarted.
 SIGCONT 18  This signal tells the process to resume execution after having received either SIGTSTP or SIGSTOP. This is the signal that is sent by the shell when we use the fg or bg commands.
Primjer 9: Pauziranje izvršenja pokrenutog procesa i njegovo ponovno pokretanje u pozadini

Kada normalno izvršavanje određenog procesa podrazumijeva da se izlaz neće slati na zaslon dok se izvodi, možda ćete htjeti pokrenuti ga u pozadini (dodavanjem znaka & na kraju naredbe).

process_name &

ili,
Nakon što se pokrene u prednjem planu, pauzirajte ga i pošaljite u pozadinu pomoću

Ctrl + Z
kill -18 PID

Primjer 10: Nasilno ubijanje procesa koji je "podivljao"

Imajte na umu da svaka distribucija pruža alate za graciozno zaustavljanje/pokretanje/ponovno pokretanje/ponovno učitavanje uobičajenih usluga, kao što je service u sustavima temeljenim na SysV-u ili systemctl u sustavima temeljenim na systemd-u.

Ako proces ne reagira na te pomoćne programe, možete ga ubiti silom tako da mu pošaljete SIGKILL signal.

ps -ef | grep apache
kill -9 3821

Dakle.. Što se dogodilo/događa se?

Kada je došlo do bilo kakvog ispada u sustavu (bilo da se radi o nestanku struje, kvaru hardvera, planiranom ili neplaniranom prekidu procesa ili bilo kakvoj abnormalnosti), zapisuje se u /var/log vaši su najbolji prijatelji koji određuju što se dogodilo ili što bi moglo uzrokovati probleme s kojima se suočavate.

cd /var/log

Neke od stavki u /var/log su obične tekstualne datoteke, druge su direktoriji, a treće komprimirane datoteke rotiranih (povijesnih) dnevnika. Htjet ćete provjeriti one s riječju error u imenu, ali pregled ostalih također može dobro doći.

Primjer 11: Ispitivanje dnevnika za pogreške u procesima

Zamislite ovaj scenarij. Vaši LAN klijenti ne mogu ispisivati na mrežne pisače. Prvi korak za rješavanje ove situacije je odlazak u direktorij /var/log/cups i vidjeti što se tamo nalazi.

Možete koristiti naredbu tail za prikaz zadnjih 10 redaka error_log datoteke ili tail -f error_log za prikaz dnevnika u stvarnom vremenu.

cd /var/log/cups
ls
tail error_log

Gornja snimka zaslona pruža neke korisne informacije za razumijevanje što bi moglo uzrokovati vaš problem. Imajte na umu da slijedeći korake ili ispravljajući neispravan proces još uvijek možda neće riješiti cjelokupni problem, ali ako ste od samog početka navikli provjeravati zapise svaki put kad se pojavi problem (bilo da je lokalni ili mrežni), sigurno će biti na dobrom putu.

Primjer 12: Ispitivanje zapisa radi hardverskih kvarova

Iako kvarove hardvera može biti teško riješiti, trebali biste provjeriti dmesg i zapise poruka te grep za riječi povezane s hardverskim dijelom za koji se pretpostavlja da je neispravan.

Slika ispod preuzeta je iz /var/log/messages nakon traženja riječi pogreške pomoću sljedeće naredbe:

less /var/log/messages | grep -i error

Vidimo da imamo problema s dva uređaja za pohranu: /dev/sdb i /dev/sdc, što zauzvrat uzrokuje problem s RAID poljem.

Zaključak

U ovom smo članku istražili neke od alata koji vam mogu pomoći da uvijek budete svjesni cjelokupnog statusa vašeg sustava. Osim toga, morate biti sigurni da su vaš operativni sustav i instalirani paketi ažurirani na najnovije stabilne verzije. I nikada, baš nikada, ne zaboravite provjeriti zapise! Tada ćete krenuti u pravom smjeru da pronađete konačno rješenje za sve probleme.

Slobodno ostavite svoje komentare, prijedloge ili pitanja - ako ih imate - koristeći donji obrazac.