Hvordan overvåke systembruk, driftsstans og feilsøke Linux-servere - Del 9


Selv om Linux er veldig pålitelig, bør kloke systemadministratorer finne en måte å holde et øye med systemets oppførsel og bruk til enhver tid. Å sikre en oppetid så nær 100 % som mulig og tilgjengeligheten av ressurser er kritiske behov i mange miljøer. Ved å undersøke tidligere og nåværende status til systemet vil vi kunne forutse og mest sannsynlig forhindre mulige problemer.

Vi introduserer Linux Foundation-sertifiseringsprogrammet

I denne artikkelen vil vi presentere en liste over noen få verktøy som er tilgjengelige i de fleste oppstrømsdistribusjoner for å sjekke systemstatus, analysere strømbrudd og feilsøke pågående problemer. Spesielt, av mylderet av tilgjengelige data, vil vi fokusere på CPU, lagringsplass og minneutnyttelse, grunnleggende prosessadministrasjon og logganalyse.

Utnyttelse av lagringsplass

Det er 2 velkjente kommandoer i Linux som brukes til å inspisere bruken av lagringsplass: df og du.

Den første, df (som står for disk free), brukes vanligvis til å rapportere samlet diskplassbruk etter filsystem.

Eksempel 1: Rapportering av diskplassbruk i byte og lesbart format

Uten alternativer rapporterer df diskplassbruk i byte. Med -h-flagget vil den vise den samme informasjonen med MB eller GB i stedet. Merk at denne rapporten også inkluderer den totale størrelsen på hvert filsystem (i 1-K-blokker), de ledige og tilgjengelige plassene og monteringspunktet for hver lagringsenhet.

df
df -h

Det er sikkert hyggelig - men det er en annen begrensning som kan gjøre et filsystem ubrukelig, og det går tom for inoder. Alle filer i et filsystem er tilordnet en inode som inneholder dens metadata.

Eksempel 2: Inspeksjon av inodebruk etter filsystem i menneskelest format med
df -hTi

du kan se mengden brukte og tilgjengelige inoder:

I følge bildet ovenfor er det 146 brukte inoder (1 %) i /home, noe som betyr at du fortsatt kan lage 226K filer i det filsystemet.

Eksempel 3: Finne og/eller slette tomme filer og kataloger

Merk at du kan gå tom for lagringsplass lenge før du går tom for inoder, og omvendt. Av den grunn må du ikke bare overvåke lagringsplassutnyttelsen, men også antall inoder som brukes av filsystemet.

Bruk følgende kommandoer for å finne tomme filer eller kataloger (som opptar 0B) som bruker inoder uten grunn:

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

Du kan også legge til -delete-flagget på slutten av hver kommando hvis du også vil slette disse tomme filene og katalogene:

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

Den forrige prosedyren slettet 4 filer. La oss sjekke igjen antall brukte/tilgjengelige noder i /home:

df -hTi | grep home

Som du kan se, er det 142 brukte inoder nå (4 færre enn før).

Eksempel 4: Undersøker diskbruk etter katalog

Hvis bruken av et bestemt filsystem er over en forhåndsdefinert prosentandel, kan du bruke du (forkortelse for diskbruk) for å finne ut hvilke filer som opptar mest plass.

Eksemplet er gitt for /var, som, som du kan se i det første bildet ovenfor, brukes på sine 67 %.

du -sch /var/*

Merk: At du kan bytte til hvilken som helst av underkatalogene ovenfor for å finne ut nøyaktig hva som er i dem og hvor mye hvert element opptar. Du kan deretter bruke den informasjonen til enten å slette noen filer hvis det ikke er nødvendig, eller utvide størrelsen på det logiske volumet om nødvendig.

Les også

  1. 12 Nyttige "df"-kommandoer for å sjekke diskplass
  2. 10 nyttige "du"-kommandoer for å finne diskbruk av filer og kataloger

Minne og CPU-utnyttelse

Det klassiske verktøyet i Linux som brukes til å utføre en overordnet sjekk av CPU/minneutnyttelse og prosessadministrasjon er toppkommando. I tillegg viser toppen en sanntidsvisning av et kjørende system. Det finnes andre verktøy som kan brukes til samme formål, for eksempel htop, men jeg har nøyd meg med toppen fordi den er installert rett ut av esken i enhver Linux-distribusjon.

Eksempel 5: Viser en live-status for systemet ditt med topp

For å starte toppen, skriv ganske enkelt inn følgende kommando på kommandolinjen, og trykk Enter.

top

La oss undersøke en typisk topputgang:

I rad 1 til 5 vises følgende informasjon:

1. Gjeldende tid (20:41:32) og oppetid (7 timer og 41 minutter). Kun én bruker er logget på systemet, og belastningsgjennomsnittet i løpet av henholdsvis 1, 5 og 15 minutter. 0,00, 0,01 og 0,05 indikerer at over disse tidsintervallene var systemet inaktivt i 0 % av tiden (0,00: ingen prosesser ventet på prosessoren), det ble deretter overbelastet med 1 % (0,01: et gjennomsnitt på 0,01 prosesser) ventet på CPU) og 5 % (0,05). Hvis mindre enn 0 og jo mindre tall (0,65, for eksempel), har systemet vært inaktivt i 35 % i løpet av de siste 1, 5 eller 15 minuttene, avhengig av hvor 0,65 vises.

2. For øyeblikket er det 121 prosesser som kjører (du kan se hele listen i 6). Bare 1 av dem kjører (øverst i dette tilfellet, som du kan se i %CPU-kolonnen) og de resterende 120 venter i bakgrunnen, men "sover" og vil forbli i den tilstanden til vi ringer dem. Hvordan? Du kan bekrefte dette ved å åpne en mysql-ledetekst og utføre et par spørringer. Du vil merke hvordan antallet kjørende prosesser øker.

Alternativt kan du åpne en nettleser og navigere til en gitt side som betjenes av Apache, og du vil få samme resultat. Disse eksemplene forutsetter selvfølgelig at begge tjenestene er installert på serveren din.

3. us (tid kjørende brukerprosesser med umodifisert prioritet), sy (tid kjørende kjerneprosesser), ni (tid kjørende brukerprosesser med endret prioritet), wa (tid som venter på I/O-fullføring), hi (tid brukt på å betjene maskinvareavbrudd), si (tid brukt på å betjene programvareavbrudd), st (tid stjålet fra gjeldende vm av hypervisor – bare i virtualiserte miljøer).

4. Fysisk minnebruk.

5. Bytt plassbruk.

Eksempel 6: Inspeksjon av fysisk minnebruk

For å inspisere RAM-minne og bytte bruk kan du også bruke kommandoen gratis.

free

Selvfølgelig kan du også bruke bryterne -m (MB) eller -g (GB) for å vise den samme informasjonen i lesbar form:

free -m

Uansett må du være klar over det faktum at kjernen reserverer så mye minne som mulig og gjør det tilgjengelig for prosesser når de ber om det. Spesielt «-/+ buffers/cache»-linjen viser de faktiske verdiene etter at denne I/O-cachen er tatt i betraktning.

Med andre ord, mengden minne som brukes av prosesser og mengden tilgjengelig for andre prosesser (i dette tilfellet henholdsvis 232 MB brukt og 270 MB tilgjengelig). Når prosesser trenger dette minnet, vil kjernen automatisk redusere størrelsen på I/O-cachen.

Les også: 10 nyttige "gratis" kommandoer for å sjekke Linux-minnebruk

Ta en nærmere titt på prosesser

Til enhver tid kjører det mange prosesser på vårt Linux-system. Det er to verktøy som vi vil bruke for å overvåke prosesser nøye: ps og pstree.

Eksempel 7: Viser hele prosesslisten i systemet ditt med ps (full standard format)

Ved å bruke -e og -f alternativene kombinert til én (-ef) kan du liste opp alle prosessene som kjører på systemet ditt. Du kan overføre denne utgangen til andre verktøy, for eksempel grep (som forklart i del 1 av LFCS-serien) for å begrense utdataene til ønsket(e):

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

Prosesslisten ovenfor viser følgende informasjon:

eier av prosessen, PID, overordnet PID (overordnet prosess), prosessorbruk, tidspunkt da kommandoen startet, tty (? indikerer at det er en demon), den akkumulerte CPU-tiden og kommandoen knyttet til prosessen.

Eksempel 8: Tilpassing og sortering av utdata fra ps

Imidlertid trenger du kanskje ikke all den informasjonen, og vil gjerne vise eieren av prosessen, kommandoen som startet den, dens PID og PPID, og prosentandelen av minnet den bruker for øyeblikket – i den rekkefølgen, og sorter etter minnebruk i synkende rekkefølge (merk at ps som standard er sortert etter PID).

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

Der minustegnet foran %mem indikerer sortering i synkende rekkefølge.

Hvis en prosess av en eller annen grunn begynner å ta for mye systemressurser og det er sannsynlig å sette den generelle funksjonaliteten til systemet i fare, vil du stoppe eller pause utførelsen ved å sende et av følgende signaler ved å bruke kill-programmet til det. Andre grunner til at du vil vurdere å gjøre dette er når du har startet en prosess i forgrunnen, men vil sette den på pause og fortsette i bakgrunnen.

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.
Eksempel 9: Pause utførelsen av en kjørende prosess og gjenoppta den i bakgrunnen

Når normal utførelse av en bestemt prosess innebærer at ingen utdata vil bli sendt til skjermen mens den kjører, kan det være lurt å enten starte den i bakgrunnen (legge til et og-tegn på slutten av kommandoen).

process_name &

eller,
Når den har begynt å kjøre i forgrunnen, sett den på pause og send den til bakgrunnen med

Ctrl + Z
kill -18 PID

Eksempel 10: Drap med tvang en prosess som har gått vill

Vær oppmerksom på at hver distribusjon gir verktøy for elegant å stoppe/starte/starte på nytt/laste inn vanlige tjenester på nytt, for eksempel tjeneste i SysV-baserte systemer eller systemctl i systembaserte systemer.

Hvis en prosess ikke reagerer på disse verktøyene, kan du drepe den med makt ved å sende den SIGKILL-signalet til den.

ps -ef | grep apache
kill -9 3821

Så.. Hva skjedde/skjer?

Når det har vært noen form for strømbrudd i systemet (det være seg et strømbrudd, en maskinvarefeil, et planlagt eller uplanlagt avbrudd i en prosess, eller noe unormalt i det hele tatt), logger loggene inn /var/log b> er dine beste venner for å finne ut hva som har skjedd eller hva som kan være årsaken til problemene du står overfor.

cd /var/log

Noen av elementene i /var/log er vanlige tekstfiler, andre er kataloger, og atter andre er komprimerte filer med roterte (historiske) logger. Du vil sjekke de med ordet feil i navnet, men å inspisere resten kan også være nyttig.

Eksempel 11: Undersøke logger for feil i prosesser

Se for deg dette scenariet. LAN-klientene dine kan ikke skrive ut til nettverksskrivere. Det første trinnet for å feilsøke denne situasjonen er å gå til katalogen /var/log/cups og se hva som er der.

Du kan bruke kommandoen tail for å vise de siste 10 linjene i error_log-filen, eller tail -f error_log for en sanntidsvisning av loggen.

cd /var/log/cups
ls
tail error_log

Skjermbildet ovenfor gir nyttig informasjon for å forstå hva som kan være årsaken til problemet. Merk at det å følge trinnene eller korrigere feilfunksjonen i prosessen fortsatt ikke løser det generelle problemet, men hvis du blir vant helt fra starten til å sjekke loggene hver gang det oppstår et problem (det være seg et lokalt eller et nettverk) vil definitivt være på rett spor.

Eksempel 12: Undersøker loggene for maskinvarefeil

Selv om maskinvarefeil kan være vanskelig å feilsøke, bør du sjekke dmesg og meldingsloggene og grep for relaterte ord til en maskinvaredel som antas å være feil.

Bildet nedenfor er hentet fra /var/log/messages etter å ha sett etter ordfeilen med følgende kommando:

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

Vi kan se at vi har et problem med to lagringsenheter: /dev/sdb og /dev/sdc, som igjen forårsaker et problem med RAID-arrayen.

Konklusjon

I denne artikkelen har vi utforsket noen av verktøyene som kan hjelpe deg å alltid være klar over systemets generelle status. I tillegg må du sørge for at operativsystemet og installerte pakker er oppdatert til de siste stabile versjonene. Og aldri, aldri, glem å sjekke loggene! Da vil du være på vei i riktig retning for å finne den definitive løsningen på eventuelle problemer.

Legg gjerne igjen kommentarer, forslag eller spørsmål -hvis du har noen- ved å bruke skjemaet nedenfor.