Kako spremljati uporabo sistema, izpadi in odpravljanje težav s strežniki Linux - 9. del


Čeprav je Linux zelo zanesljiv, bi morali modri sistemski skrbniki najti način, kako ves čas paziti na vedenje in uporabo sistema. Zagotavljanje neprekinjenega delovanja čim bližje 100% in razpoložljivost virov sta v mnogih okoljih ključni potrebi. Preučitev preteklega in sedanjega stanja sistema nam bo omogočila, da predvidimo in najverjetneje preprečimo morebitne težave.

Predstavljamo vam Linux Foundation Certification Program

V tem članku bomo predstavili seznam nekaj orodij, ki so na voljo v večini distribucij na zgornjem delu oskrbne verige, da preverijo stanje sistema, analizirajo izpade in odpravijo tekoče težave. Natančneje, od nešteto razpoložljivih podatkov se bomo osredotočili na CPU, prostor za shranjevanje in uporabo pomnilnika, osnovno upravljanje procesov in analizo dnevnika.

Uporaba prostora za shranjevanje

V Linuxu sta dva dobro znana ukaza, ki se uporabljata za pregled porabe prostora za shranjevanje: df in du .

Prvi, df (kar pomeni brez diska), se običajno uporablja za poročanje o celotni porabi prostora na disku v datotečnem sistemu.

Brez možnosti df poroča o uporabi prostora na disku v bajtih. Z oznako -h bo prikazal iste podatke namesto MB ali GB. Upoštevajte, da to poročilo vključuje tudi skupno velikost vsakega datotečnega sistema (v blokih 1-K), proste in razpoložljive prostore ter točko vpetja vsake pomnilniške naprave.

# df
# df -h

To je vsekakor lepo - vendar obstaja še ena omejitev, zaradi katere lahko datotečni sistem postane neuporaben in mu zmanjkuje inodov. Vse datoteke v datotečnem sistemu so preslikane v inode, ki vsebuje svoje metapodatke.

# df -hTi

vidite količino uporabljenih in razpoložljivih inodov:

Glede na zgornjo sliko je v/home uporabljenih 146 uporabljenih inod ( 1% ), kar pomeni, da lahko v tem datotečnem sistemu še vedno ustvarite 226K datotek.

Upoštevajte, da vam lahko zmanjka prostora za shranjevanje, še preden zmanjka inodov, in obratno. Iz tega razloga morate spremljati ne le izkoriščenost prostora za shranjevanje, temveč tudi število inod, ki jih uporablja datotečni sistem.

Z naslednjimi ukazi poiščite prazne datoteke ali imenike (ki zasedajo 0B), ki brez razloga uporabljajo inode:

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

Če želite izbrisati tudi te prazne datoteke in imenike, lahko na koncu vsakega ukaza dodate zastavico -delete :

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

Prejšnji postopek je izbrisal 4 datoteke. Ponovno preverimo število uporabljenih/razpoložljivih vozlišč v/home:

# df -hTi | grep home

Kot lahko vidite, je zdaj uporabljenih 142 inodov (4 manj kot prej).

Če je uporaba določenega datotečnega sistema nad vnaprej določenim odstotkom, lahko s pomočjo du (okrajšava za uporabo diska) ugotovite, katere datoteke zasedajo največ prostora.

Primer je podan za /var , ki je, kot lahko vidite na prvi zgornji sliki, uporabljen pri 67%.

# du -sch /var/*

Opomba: da lahko preklopite na katerega koli od zgornjih podimenikov, da natančno ugotovite, kaj je v njih in koliko zaseda posamezen element. Nato lahko te podatke uporabite za brisanje nekaterih datotek, če niso potrebne, ali po potrebi razširite velikost logičnega nosilca.

Preberite tudi

  1. 12 uporabnih ukazov\"df" za preverjanje prostora na disku
  2. 10 uporabnih ukazov "du" za iskanje datotek in imenikov na disku

Uporaba pomnilnika in CPU

Klasično orodje v Linuxu, ki se uporablja za splošno preverjanje izkoriščenosti CPU/pomnilnika in upravljanja procesov, je htop, vendar sem se odločil za vrh, ker je nameščen takoj v kateri koli distribuciji Linuxa.

Za začetek zgoraj v ukazno vrstico preprosto vnesite naslednji ukaz in pritisnite Enter.

# top

Oglejmo si tipične vrhunske rezultate:

V vrsticah od 1 do 5 so prikazane naslednje informacije:

1. Trenutni čas (20.41.32) in uptime (7 ur in 41 minut). V sistem je prijavljen le en uporabnik in povprečna obremenitev v zadnjih 1, 5 oziroma 15 minutah. 0,00, 0,01 in 0,05 pomenijo, da je sistem v teh časovnih intervalih 0% časa miroval (0,00: CPU ni čakal nobenega procesa), nato pa je bil preobremenjen za 1% (0,01: povprečno 0,01 procesa so čakali na CPU) in 5% (0,05). Če je število manjše od 0 in manjše število (na primer 0,65), je bil sistem v zadnjih 1, 5 ali 15 minutah v stanju mirovanja 35%, odvisno od tega, kje se pojavi 0,65.

2. Trenutno se izvaja 121 procesov (celoten seznam lahko vidite v 6). Zažene se samo 1 od njih (v tem primeru zgoraj, kot vidite v stolpcu% CPU), preostalih 120 pa čaka v ozadju, vendar\"spi \" in bo ostalo v tem stanju, dokler jih ne pokličemo. To lahko preverite tako, da odprete poziv mysql in izvedete nekaj poizvedb. Opazili boste, kako se povečuje število izvajanih procesov.

Lahko pa odprete spletni brskalnik in se pomaknete do katere koli strani, ki jo streže Apache, in dobili boste enak rezultat. Ti primeri seveda predvidevajo, da sta obe storitvi nameščeni v vašem strežniku.

3. us (uporabniški procesi, ki se izvajajo z nespremenjeno prednostjo), sy (časovno tečejo procesi jedra), ni (časovno tečejo uporabniški procesi s spremenjeno prednostjo), wa (čas čaka na dokončanje V/I), hi (čas, porabljen za servisiranje strojnih prekinitev), si (čas, porabljen za servisiranje programskih prekinitev), st (čas, ki ga hipervizor ukrade iz trenutne vm - samo v virtualiziranih okoljih).

4. Uporaba fizičnega pomnilnika.

5. Zamenjajte prostor.

Za pregled pomnilnika RAM-a in uporabo zamenjave lahko uporabite tudi brezplačen ukaz.

# free

Seveda lahko uporabite tudi stikala -m (MB) ali -g (GB) za prikaz enakih informacij v človekom berljivi obliki:

# free -m

Kakor koli že, zavedati se morate dejstva, da jedro rezervira čim več pomnilnika in ga da na voljo procesom, ko to zahtevajo. Vrstica " -/+ medpomnilniki/predpomnilnik " prikazuje dejanske vrednosti po tem, ko je ta V/I predpomnilnik upoštevan.

Z drugimi besedami, količina pomnilnika, ki ga uporabljajo procesi, in količina, ki je na voljo drugim procesom (v tem primeru 232 MB porabljenega oziroma 270 MB na voljo). Ko procesi potrebujejo ta pomnilnik, bo jedro samodejno zmanjšalo velikost V/I predpomnilnika.

Preberite tudi : 10 koristnih »brezplačnih« ukazov za preverjanje uporabe pomnilnika Linux

Podrobnejši pogled na procese

V našem sistemu Linux se v vsakem trenutku izvajajo številni procesi. Za natančno spremljanje procesov bomo uporabili dve orodji: ps in pstree .

Z uporabo možnosti -e in -f , združenih v eno ( -ef ), lahko navedete vse procese, ki se trenutno izvajajo v vašem sistemu. Ta izhod lahko usmerite v druga orodja, kot je grep (kot je razloženo v 1. delu serije LFCS), da izhod zožite na želene procese:

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

Zgornji seznam postopkov prikazuje naslednje informacije:

lastnik procesa, PID, nadrejeni PID (nadrejeni proces), izkoriščenost procesorja, čas, ko se je ukaz začel, tty (? označuje, da je demon), skupni čas procesorja in ukaz, povezan s postopkom.

Vendar morda ne potrebujete vseh teh informacij in bi radi prikazali lastnika procesa, ukaz, ki ga je zagnal, njegove PID in PPID ter odstotek pomnilnika, ki ga trenutno uporablja - v tem vrstnem redu in razvrsti po uporaba pomnilnika v padajočem vrstnem redu (upoštevajte, da je ps privzeto razvrščen po PID).

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

Kjer znak minus pred% mem označuje razvrščanje v padajočem vrstnem redu.

Če postopek iz nekega razloga začne zajemati preveč sistemskih virov in je verjetno, da bo ogrozil splošno funkcionalnost sistema, boste želeli ustaviti ali zaustaviti njegovo izvajanje in mu prenesti enega od naslednjih signalov s programom kill. Drugi razlogi, zakaj bi to storili, so takrat, ko ste postopek začeli v ospredju, vendar ga želite zaustaviti in nadaljevati v ozadju.

Ko običajna izvedba določenega postopka pomeni, da med izvajanjem noben izhod ne bo poslan na zaslon, ga boste morda želeli zagnati v ozadju (dodajanje znaka & na koncu ukaza).

process_name &

ali
Ko se začne izvajati v ospredju, jo zaustavite in jo pošljite v ozadje

Ctrl + Z
# kill -18 PID

Upoštevajte, da vsaka distribucija ponuja orodja za elegantno zaustavitev/zagon/ponovni zagon/ponovno nalaganje običajnih storitev, kot je storitev v sistemih, ki temeljijo na SysV, ali systemctl v sistemih, ki temeljijo na systemd.

Če se postopek ne odzove na te pripomočke, ga lahko na silo ubijete tako, da mu pošljete signal SIGKILL.

# ps -ef | grep apache
# kill -9 3821

Torej .. Kaj se je zgodilo/se dogaja?

Ko pride do kakršnega koli izpada sistema (naj bo to izpad električne energije, okvara strojne opreme, načrtovana ali nenačrtovana prekinitev postopka ali kakršna koli nepravilnost), se dnevniki v /var/log so vaši najboljši prijatelji, da ugotovijo, kaj se je zgodilo ali kaj bi lahko povzročilo težave, s katerimi se soočate.

# cd /var/log

Nekateri elementi v /var/log so običajne besedilne datoteke, drugi so imeniki, spet drugi pa stisnjene datoteke rotiranih (zgodovinskih) dnevnikov. Boste želeli preveriti tiste, ki imajo v svojem imenu besedo napaka, vendar pa vam lahko ogleduje tudi ostalo.

Predstavljajte si ta scenarij. Odjemalci LAN ne morejo tiskati na omrežne tiskalnike. Prvi korak za odpravljanje te težave je v imeniku /var/log/cups in preveriti, kaj je tam.

Ukaz tail lahko uporabite za prikaz zadnjih 10 vrstic datoteke error_log ali tail -f error_log za sprotni pogled dnevnika.

# cd /var/log/cups
# ls
# tail error_log

Zgornji posnetek zaslona vsebuje nekaj koristnih informacij za razumevanje, kaj bi lahko povzročilo vašo težavo. Upoštevajte, da sledenje korakom ali odpravljanje nepravilnega delovanja postopka še vedno morda ne bo rešilo celotne težave, če pa ste že od začetka uporabljeni in preverite dnevnike vsakič, ko se pojavi težava (bodisi lokalna bodisi omrežna), zagotovo bom na pravi poti.

Čeprav je pri odpravljanju težav z napakami strojne opreme težko, preverite dnevnike dmesg in sporočil ter grep za sorodne besede v delu strojne opreme, za katerega se domneva, da je pokvarjen.

Spodnja slika je vzeta iz /var/log/messages po iskanju besedne napake z naslednjim ukazom:

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

Vidimo, da imamo težave z dvema napravama za shranjevanje: /dev/sdb in /dev/sdc , kar pa povzroči težavo z matriko RAID.

Zaključek

V tem članku smo raziskali nekatera orodja, ki vam lahko pomagajo, da se vedno zavedate splošnega stanja vašega sistema. Poleg tega morate zagotoviti, da so vaš operacijski sistem in nameščeni paketi posodobljeni na najnovejše stabilne različice. In nikoli, nikoli, ne pozabite preveriti dnevnikov! Potem se boste usmerili v pravo smer, da boste našli dokončno rešitev za vsa vprašanja.

Pustite svoje komentarje, predloge ali vprašanja, če jih imate, s pomočjo spodnjega obrazca.