Kaip stebėti sistemos naudojimą, dingimus ir „Linux“ serverių trikčių šalinimą – 9 dalis


Nors „Linux“ yra labai patikima, išmintingi sistemos administratoriai turėtų rasti būdą, kaip nuolat stebėti sistemos elgesį ir naudojimą. Užtikrinti kuo artimesnį 100 % veikimo laiką ir išteklių prieinamumą yra labai svarbūs daugelyje aplinkų. Išnagrinėję ankstesnę ir dabartinę sistemos būseną, galėsime numatyti galimas problemas ir greičiausiai jų išvengti.

Pristatome „Linux Foundation“ sertifikavimo programą

Šiame straipsnyje pateiksime sąrašą kelių įrankių, kurie yra prieinami daugumoje paskirstymų, kad būtų galima patikrinti sistemos būseną, analizuoti gedimus ir pašalinti esamas problemas. Konkrečiai, iš daugybės turimų duomenų sutelksime dėmesį į centrinį procesorių, atminties vietos ir atminties panaudojimą, pagrindinį procesų valdymą ir žurnalų analizę.

Sandėliavimo vietos panaudojimas

„Linux“ yra 2 gerai žinomos komandos, kurios naudojamos saugyklos vietos naudojimui patikrinti: df ir du.

Pirmasis, df (kuris reiškia be disko), paprastai naudojamas pranešti apie bendrą disko vietos naudojimą pagal failų sistemą.

1 pavyzdys: Ataskaitų apie disko vietos naudojimą baitais ir žmogaus skaitomu formatu

Be parinkčių df praneša apie disko vietos naudojimą baitais. Su vėliava -h bus rodoma ta pati informacija, naudojant MB arba GB. Atminkite, kad į šią ataskaitą taip pat įtrauktas bendras kiekvienos failų sistemos dydis (1-K blokais), laisvos ir laisvos vietos bei kiekvieno saugojimo įrenginio prijungimo taškas.

df
df -h

Tai tikrai puiku, tačiau yra dar vienas apribojimas, dėl kurio failų sistema gali tapti netinkama naudoti, ir dėl to baigiasi inodes. Visi failų sistemos failai yra susieti su inode, kuriame yra jo metaduomenys.

2 pavyzdys: Inode naudojimo tikrinimas failų sistemoje žmogaus skaitomu formatu su
df -hTi

galite pamatyti naudojamų ir turimų inodų kiekį:

Pagal aukščiau pateiktą paveikslėlį, /home yra 146 naudojami inodai (1 %), o tai reiškia, kad toje failų sistemoje vis tiek galite sukurti 226 000 failų.

3 pavyzdys: tuščių failų ir katalogų radimas ir (arba) ištrynimas

Atminkite, kad vietos saugykloje gali pritrūkti daug anksčiau, nei baigiasi inodes, ir atvirkščiai. Dėl šios priežasties turite stebėti ne tik saugyklos vietos naudojimą, bet ir failų sistemos naudojamų inodų skaičių.

Naudokite šias komandas, kad surastumėte tuščius failus arba katalogus (kurie užima 0B), kurie naudoja inodes be priežasties:

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

Be to, kiekvienos komandos pabaigoje galite pridėti vėliavėlę -delete, jei taip pat norite ištrinti tuos tuščius failus ir katalogus:

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

Ankstesnė procedūra panaikino 4 failus. Dar kartą patikrinkime naudojamų/galimų mazgų skaičių /home:

df -hTi | grep home

Kaip matote, šiuo metu naudojami 142 inodai (4 mažiau nei anksčiau).

4 pavyzdys: disko naudojimo tyrimas pagal katalogą

Jei tam tikros failų sistemos naudojimas viršija iš anksto nustatytą procentą, galite naudoti du (disko naudojimo trumpinys), kad sužinotumėte, kurie failai užima daugiausia vietos.

Pavyzdys pateiktas /var, kuris, kaip matote pirmame paveikslėlyje aukščiau, naudojamas 67 %.

du -sch /var/*

Pastaba: galite perjungti į bet kurį iš anksčiau pateiktų pakatalogių, kad tiksliai sužinotumėte, kas juose yra ir kiek kiekvienas elementas užima. Tada galite naudoti šią informaciją norėdami ištrinti kai kuriuos failus, jei jų nereikia, arba išplėsti loginio tomo dydį, jei reikia.

Taip pat skaitykite

  1. 12 naudingų „df“ komandų, skirtų vietos diske patikrinti
  2. 10 naudingų „du“ komandų, skirtų rasti failų ir katalogų naudojimą diske

Atminties ir procesoriaus panaudojimas

Klasikinis „Linux“ įrankis, naudojamas bendram procesoriaus/atminties panaudojimo ir procesų valdymo patikrinimui, yra aukščiausia komanda. Be to, viršuje rodomas veikiančios sistemos vaizdas realiuoju laiku. Yra ir kitų įrankių, kuriuos būtų galima naudoti tam pačiam tikslui, pvz., „htop“, bet aš pasitenkinau geriausiu, nes jis įdiegtas iš anksto bet kuriame „Linux“ paskirstyme.

5 pavyzdys: rodoma tiesioginė jūsų sistemos būsena su viršuje

Norėdami pradėti iš viršaus, tiesiog komandų eilutėje įveskite šią komandą ir paspauskite Enter.

top

Panagrinėkime tipišką aukščiausią išvestį:

1–5 eilutėse rodoma ši informacija:

1. Dabartinis laikas (20:41:32) ir veikimo laikas (7 valandos ir 41 minutė). Tik vienas vartotojas yra prisijungęs prie sistemos, o apkrovos vidurkis per paskutines 1, 5 ir 15 minučių. 0,00, 0,01 ir 0,05 rodo, kad per tuos laiko intervalus sistema neveikė 0 % laiko (0,00: jokie procesai nelaukė procesoriaus), tada ji buvo perkrauta 1 % (0,01: vidutiniškai 0,01 proceso laukė CPU) ir 5% (0,05). Jei mažesnis nei 0 ir mažesnis skaičius (pavyzdžiui, 0,65), sistema per paskutines 1, 5 arba 15 minučių neveikė 35 %, atsižvelgiant į tai, kur rodomas 0,65.

2. Šiuo metu veikia 121 procesas (visą sąrašą galite matyti 6). Tik 1 iš jų veikia (šiuo atveju viršuje, kaip matote % CPU stulpelyje), o likę 120 laukia fone, bet „miega“ ir išliks tokioje būsenoje, kol mes jiems nepakviesime. Kaip? Tai galite patikrinti atidarę mysql raginimą ir vykdydami keletą užklausų. Pastebėsite, kaip didėja vykdomų procesų skaičius.

Arba galite atidaryti žiniatinklio naršyklę ir pereiti į bet kurį puslapį, kurį aptarnauja „Apache“, ir gausite tą patį rezultatą. Žinoma, šie pavyzdžiai daro prielaidą, kad jūsų serveryje yra įdiegtos abi paslaugos.

3. us (laikas, kai vykdomi vartotojo procesai su nemodifikuotu prioritetu), sy (laikas, kai vykdomi branduolio procesai), ni (laikas, kai vykdomi vartotojo procesai su pakeistu prioritetu), wa (laikas, kai laukiama įvesties/išvesties užbaigimo), hi (laikas, praleistas techninės įrangos pertraukimų aptarnavimui), si (laikas, praleistas aptarnaujant programinės įrangos pertrūkius), st (laikas, kurį hipervizorius pavogė iš esamos vm – tik virtualizuotose aplinkose).

4. Fizinės atminties naudojimas.

5. Pakeiskite vietos naudojimą.

6 pavyzdys: fizinės atminties naudojimo tikrinimas

Norėdami patikrinti RAM atmintį ir apsikeitimo naudojimą, taip pat galite naudoti komandą nemokama.

free

Žinoma, taip pat galite naudoti jungiklius -m (MB) arba -g (GB), kad parodytumėte tą pačią informaciją žmogui suprantama forma:

free -m

Bet kuriuo atveju turite žinoti, kad branduolys rezervuoja kiek įmanoma daugiau atminties ir padaro ją prieinamą procesams, kai jie to reikalauja. Visų pirma eilutė „-/+ buffers/cache“ rodo tikrąsias reikšmes, kai atsižvelgiama į šią I/O talpyklą.

Kitaip tariant, procesų naudojamos atminties kiekis ir kitiems procesams prieinamos atminties kiekis (šiuo atveju atitinkamai 232 MB ir 270 MB). Kai procesams reikia šios atminties, branduolys automatiškai sumažins įvesties/išvesties talpyklos dydį.

Taip pat skaitykite: 10 naudingų „nemokamų“ komandų, skirtų patikrinti „Linux“ atminties naudojimą

Atidžiau pažvelgti į procesus

Bet kuriuo metu mūsų Linux sistemoje veikia daug procesų. Yra du įrankiai, kuriuos naudosime norėdami atidžiai stebėti procesus: ps ir pstree.

7 pavyzdys: viso procesų sąrašo rodymas jūsų sistemoje naudojant ps (visas standartinis formatas)

Naudodami -e ir -f parinktis, sujungtas į vieną (-ef), galite išvardyti visus procesus, kurie šiuo metu veikia jūsų sistemoje. Galite perkelti šią išvestį į kitus įrankius, pvz., grep (kaip paaiškinta LFCS serijos 1 dalyje), kad susiaurintumėte išvestį iki pageidaujamo (-ų) proceso (-ų):

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

Aukščiau pateiktame procesų sąraše rodoma ši informacija:

proceso savininkas, PID, pirminis PID (pagrindinis procesas), procesoriaus panaudojimas, komandos paleidimo laikas, tty (? reiškia, kad tai demonas), sukauptas procesoriaus laikas ir su procesu susijusi komanda.

8 pavyzdys: ps išvesties tinkinimas ir rūšiavimas

Tačiau galbūt jums nereikia visos šios informacijos ir norėtumėte parodyti proceso savininką, jį paleidusią komandą, jo PID ir PPID bei šiuo metu naudojamos atminties procentą – tokia tvarka ir rūšiuoti pagal atminties naudojimas mažėjančia tvarka (atkreipkite dėmesį, kad pagal numatytuosius nustatymus ps yra rūšiuojamas pagal PID).

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

Kai minuso ženklas priešais %mem rodo rūšiavimą mažėjančia tvarka.

Jei dėl kokių nors priežasčių procesas pradeda naudoti per daug sistemos išteklių ir gali pakenkti bendram sistemos funkcionalumui, norėsite sustabdyti arba pristabdyti jo vykdymą, perduodant jam vieną iš šių signalų naudojant nužudymo programą. Kitos priežastys, kodėl turėtumėte tai padaryti, yra tada, kai pradėjote procesą pirmame plane, bet norite jį pristabdyti ir tęsti fone.

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.
9 pavyzdys: Vykdomo proceso vykdymo pristabdymas ir jo atnaujinimas fone

Kai įprastas tam tikro proceso vykdymas reiškia, kad jo veikimo metu ekrane nebus siunčiama jokia išvestis, galbūt norėsite jį paleisti fone (komandos pabaigoje pridedant ampersandą).

process_name &

arba
Kai jis pradės veikti priekiniame plane, pristabdykite jį ir nusiųskite į foną su

Ctrl + Z
kill -18 PID

10 pavyzdys: žudymas prievarta, procesas „pasibodo“

Atkreipkite dėmesį, kad kiekviename paskirstyme yra įrankių, leidžiančių maloniai sustabdyti/paleisti/iš naujo paleisti/iš naujo įkelti įprastas paslaugas, pvz., paslaugą „SysV“ pagrįstose sistemose arba systemctl sistemose, pagrįstose sistemose.

Jei procesas nereaguoja į šias paslaugas, galite jį nužudyti jėga, nusiųsdami jam SIGKILL signalą.

ps -ef | grep apache
kill -9 3821

Taigi.. Kas atsitiko/vyksta?

Kai sistemoje įvyksta kokių nors sutrikimų (ar tai būtų elektros energijos tiekimo nutraukimas, aparatinės įrangos gedimas, planuojamas ar neplanuotas proceso pertraukimas arba bet koks nenormalus sutrikimas), žurnalai registruojami /var/log yra jūsų geriausi draugai, kad nustatytumėte, kas atsitiko arba dėl ko gali kilti problemų, su kuriomis susiduriate.

cd /var/log

Kai kurie /var/log elementai yra įprasti tekstiniai failai, kiti yra katalogai, o dar kiti yra suspausti pasuktų (istorinių) žurnalų failai. Norėsite patikrinti tuos, kurių pavadinime yra žodis klaida, tačiau gali praversti ir kitų apžiūra.

11 pavyzdys: žurnalų tikrinimas, ar nėra procesų klaidų

Įsivaizduokite šį scenarijų. Jūsų LAN klientai negali spausdinti su tinklo spausdintuvais. Pirmasis šios situacijos trikčių šalinimo veiksmas – apsilankymas /var/log/cups kataloge ir pažiūrėkite, kas ten yra.

Galite naudoti komandą uodega, kad parodytumėte paskutines 10 error_log failo eilučių, arba tail -f error_log, kad peržiūrėtumėte žurnalą realiuoju laiku.

cd /var/log/cups
ls
tail error_log

Aukščiau pateiktoje ekrano kopijoje pateikiama naudingos informacijos, padedančios suprasti, kas gali sukelti jūsų problemą. Atminkite, kad atlikus veiksmus arba ištaisius proceso gedimą, bendra problema vis tiek gali neišspręsti, bet jei nuo pat pradžių įpratote tikrinti žurnalus kiekvieną kartą iškilus problemai (nesvarbu, ar tai vietinė, ar tinklo), tikrai eisiu teisingu keliu.

12 pavyzdys: žurnalų tikrinimas, ar nėra aparatinės įrangos gedimų

Nors aparatūros gedimus gali būti sudėtinga pašalinti, turėtumėte patikrinti dmesg ir pranešimų žurnalus bei grep, ar nėra susijusių žodžių su aparatinės įrangos dalimi, kuri, kaip manoma, yra sugedusi.

Žemiau esantis vaizdas paimtas iš /var/log/messages, ieškant žodžio klaidos naudojant šią komandą:

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

Matome, kad kyla problemų dėl dviejų saugojimo įrenginių: /dev/sdb ir /dev/sdc, o tai savo ruožtu sukelia RAID masyvo problemą.

Išvada

Šiame straipsnyje išnagrinėjome kai kuriuos įrankius, kurie gali padėti visada žinoti bendrą sistemos būseną. Be to, turite įsitikinti, kad operacinė sistema ir įdiegti paketai yra atnaujinami į naujausias stabilias versijas. Ir niekada, niekada nepamirškite patikrinti žurnalų! Tada eisite teisinga kryptimi, kad rastumėte galutinį bet kokių problemų sprendimą.

Nedvejodami palikite savo komentarus, pasiūlymus ar klausimus (jei turite) naudodami toliau pateiktą formą.