Zoeken op website

Systeemgebruik en storingen monitoren en problemen met Linux-servers oplossen - Deel 9


Hoewel Linux zeer betrouwbaar is, moeten verstandige systeembeheerders een manier vinden om te allen tijde het gedrag en het gebruik van het systeem in de gaten te houden. Het garanderen van een uptime die zo dicht mogelijk bij 100% ligt en de beschikbaarheid van bronnen zijn in veel omgevingen van essentieel belang. Door de vroegere en huidige status van het systeem te onderzoeken, kunnen we mogelijke problemen voorzien en hoogstwaarschijnlijk voorkomen.

Introductie van het Linux Foundation-certificeringsprogramma

In dit artikel presenteren we een lijst met enkele tools die beschikbaar zijn in de meeste upstream-distributies om de systeemstatus te controleren, storingen te analyseren en lopende problemen op te lossen. Van de talloze beschikbare gegevens zullen we ons specifiek concentreren op CPU, opslagruimte en geheugengebruik, basisprocesbeheer en loganalyse.

Gebruik van opslagruimte

Er zijn twee bekende commando's in Linux die worden gebruikt om het gebruik van opslagruimte te inspecteren: df en du.

De eerste, df (wat staat voor schijfvrij), wordt doorgaans gebruikt om het totale schijfruimtegebruik per bestandssysteem te rapporteren.

Voorbeeld 1: Rapportage van schijfruimtegebruik in bytes en voor mensen leesbare indeling

Zonder opties rapporteert df het schijfruimtegebruik in bytes. Met de vlag -h wordt dezelfde informatie weergegeven in MB of GB. Merk op dat dit rapport ook de totale grootte van elk bestandssysteem (in blokken van 1K), de vrije en beschikbare ruimte en het koppelpunt van elk opslagapparaat bevat.

df
df -h

Dat is zeker leuk, maar er is nog een andere beperking die een bestandssysteem onbruikbaar kan maken, en dat is dat de inodes bijna op zijn. Alle bestanden in een bestandssysteem worden toegewezen aan een inode die de metagegevens bevat.

Voorbeeld 2: Inspectie van het inodegebruik per bestandssysteem in een voor mensen leesbaar formaat met
df -hTi

je kunt het aantal gebruikte en beschikbare inodes zien:

Volgens de bovenstaande afbeelding zijn er 146 gebruikte inodes (1%) in /home, wat betekent dat je nog steeds 226K-bestanden kunt maken in dat bestandssysteem.

Voorbeeld 3: Lege bestanden en mappen zoeken en/of verwijderen

Houd er rekening mee dat de opslagruimte lang kan opraken voordat de inodes opraken, en omgekeerd. Om die reden moet u niet alleen het gebruik van de opslagruimte controleren, maar ook het aantal inodes dat door het bestandssysteem wordt gebruikt.

Gebruik de volgende opdrachten om lege bestanden of mappen (die 0B in beslag nemen) te vinden die zonder reden inodes gebruiken:

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

Je kunt ook de vlag -delete aan het einde van elke opdracht toevoegen als je ook die lege bestanden en mappen wilt verwijderen:

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

De vorige procedure verwijderde 4 bestanden. Laten we nogmaals het aantal gebruikte/beschikbare knooppunten controleren in /home:

df -hTi | grep home

Zoals je kunt zien, zijn er nu 142 gebruikte inodes (4 minder dan voorheen).

Voorbeeld 4: Schijfgebruik per map onderzoeken

Als het gebruik van een bepaald bestandssysteem boven een vooraf bepaald percentage ligt, kunt u du (afkorting van schijfgebruik) gebruiken om erachter te komen welke bestanden de meeste ruimte in beslag nemen.

Het voorbeeld wordt gegeven voor /var, dat, zoals je kunt zien in de eerste afbeelding hierboven, op 67% wordt gebruikt.

du -sch /var/*

Opmerking: u kunt naar een van de bovenstaande submappen overschakelen om erachter te komen wat er precies in staat en hoeveel elk item in beslag neemt. U kunt die informatie vervolgens gebruiken om enkele bestanden te verwijderen als deze niet nodig zijn, of om indien nodig de grootte van het logische volume uit te breiden.

Lees ook

  1. 12 Handige “df”-opdrachten om schijfruimte te controleren
  2. 10 Handige “du”-opdrachten om schijfgebruik van bestanden en mappen te vinden

Geheugen- en CPU-gebruik

De klassieke tool in Linux die wordt gebruikt om een algemene controle uit te voeren van het CPU-/geheugengebruik en procesbeheer is topcommando. Bovendien geeft top een realtime weergave van een actief systeem weer. Er zijn andere tools die voor hetzelfde doel kunnen worden gebruikt, zoals htop, maar ik heb genoegen genomen met top omdat het kant-en-klaar in elke Linux-distributie wordt geïnstalleerd.

Voorbeeld 5: Een live status van uw systeem weergeven met top

Om bovenaan te beginnen typt u eenvoudigweg de volgende opdracht op uw opdrachtregel en drukt u op Enter.

top

Laten we eens kijken naar een typische topoutput:

In rij 1 tot en met 5 wordt de volgende informatie weergegeven:

1. De huidige tijd (20:41:32 uur) en uptime (7 uur en 41 minuten). Er is slechts één gebruiker aangemeld bij het systeem en het belastingsgemiddelde gedurende respectievelijk de afgelopen 1, 5 en 15 minuten. 0,00, 0,01 en 0,05 geven aan dat het systeem gedurende deze tijdsintervallen 0% van de tijd inactief was (0,00: er wachtten geen processen op de CPU) en vervolgens met 1% werd overbelast (0,01: gemiddeld 0,01 processen wachtten op de CPU) en 5% (0,05). Indien kleiner dan 0 en hoe kleiner het getal (bijvoorbeeld 0,65), was het systeem gedurende de afgelopen 1, 5 of 15 minuten voor 35% inactief, afhankelijk van waar 0,65 verschijnt.

2. Momenteel zijn er 121 processen actief (je kunt de volledige lijst bekijken in 6). Slechts 1 ervan is actief (in dit geval bovenaan, zoals je kunt zien in de kolom %CPU) en de overige 120 wachten op de achtergrond, maar zijn "slapend" en zullen in die staat blijven totdat we ze bellen. Hoe? U kunt dit verifiëren door een MySQL-prompt te openen en een aantal query's uit te voeren. U zult merken hoe het aantal lopende processen toeneemt.

Als alternatief kunt u een webbrowser openen en naar een bepaalde pagina navigeren die door Apache wordt bediend, en u krijgt hetzelfde resultaat. Uiteraard gaan deze voorbeelden ervan uit dat beide services op uw server zijn geïnstalleerd.

3. us (tijd lopende gebruikersprocessen met ongewijzigde prioriteit), sy (tijd lopende kernelprocessen), ni (tijd lopende gebruikersprocessen met gewijzigde prioriteit), wa (tijd die wacht op I/O-voltooiing), hi (tijd besteed aan het onderhoud van hardware-interrupts), si (tijd besteed aan het onderhouden van software-interrupts), st (tijd gestolen van de huidige VM door de hypervisor – alleen in gevirtualiseerde omgevingen).

4. Fysiek geheugengebruik.

5. Wissel ruimtegebruik uit.

Voorbeeld 6: Fysiek geheugengebruik inspecteren

Om het RAM-geheugen te inspecteren en het gebruik van swaps uit te wisselen, kunt u ook de opdracht free gebruiken.

free

Natuurlijk kunt u ook de -m (MB) of -g (GB) schakelaars gebruiken om dezelfde informatie in voor mensen leesbare vorm weer te geven:

free -m

Hoe dan ook, je moet je bewust zijn van het feit dat de kernel zoveel mogelijk geheugen reserveert en dit beschikbaar maakt voor processen wanneer zij daarom vragen. In het bijzonder toont de regel “-/+ buffers/cache” de werkelijke waarden nadat rekening is gehouden met deze I/O-cache.

Met andere woorden: de hoeveelheid geheugen die door processen wordt gebruikt en de hoeveelheid die beschikbaar is voor andere processen (in dit geval respectievelijk 232 MB gebruikt en 270 MB beschikbaar). Wanneer processen dit geheugen nodig hebben, zal de kernel automatisch de grootte van de I/O-cache verkleinen.

Lees ook: 10 Handige “gratis” opdrachten om het Linux-geheugengebruik te controleren

Processen nader bekijken

Er draaien op elk moment veel processen op ons Linux-systeem. Er zijn twee tools die we zullen gebruiken om processen nauwlettend te volgen: ps en pstree.

Voorbeeld 7: De volledige proceslijst in uw systeem weergeven met ps (volledig standaardformaat)

Met behulp van de opties -e en -f gecombineerd in één (-ef) kunt u alle processen weergeven die momenteel op uw systeem worden uitgevoerd. Je kunt deze uitvoer doorsturen naar andere tools, zoals grep (zoals uitgelegd in deel 1 van de LFCS-serie) om de uitvoer te beperken tot de gewenste processen:

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

De bovenstaande proceslijst toont de volgende informatie:

eigenaar van het proces, PID, Parent PID (het ouderproces), processorgebruik, tijdstip waarop de opdracht startte, tty (de ? geeft aan dat het een daemon is), de gecumuleerde CPU-tijd en de opdracht die aan het proces is gekoppeld.

Voorbeeld 8: De uitvoer van ps aanpassen en sorteren

Misschien heeft u al die informatie echter niet nodig en wilt u de eigenaar van het proces laten zien, de opdracht waarmee het is gestart, de PID en PPID ervan, en het percentage geheugen dat het momenteel gebruikt – in die volgorde, en gesorteerd op geheugengebruik in aflopende volgorde (merk op dat ps standaard wordt gesorteerd op PID).

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

Waar het minteken vóór %mem sortering in aflopende volgorde aangeeft.

Als een proces om wat voor reden dan ook teveel systeembronnen begint te gebruiken en het waarschijnlijk de algehele functionaliteit van het systeem in gevaar brengt, zult u de uitvoering ervan willen stoppen of pauzeren door een van de volgende signalen door te geven met behulp van het kill-programma. Andere redenen waarom u dit zou overwegen, zijn wanneer u een proces op de voorgrond bent gestart, maar het wilt pauzeren en op de achtergrond wilt hervatten.

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.
Voorbeeld 9: De uitvoering van een lopend proces pauzeren en op de achtergrond hervatten

Wanneer de normale uitvoering van een bepaald proces inhoudt dat er geen uitvoer naar het scherm wordt verzonden terwijl het wordt uitgevoerd, wilt u het misschien op de achtergrond starten (door een ampersand toe te voegen aan het einde van de opdracht).

process_name &

of,
Zodra het op de voorgrond is gestart, pauzeert u het en stuurt u het naar de achtergrond

Ctrl + Z
kill -18 PID

Voorbeeld 10: Met geweld een proces doden dat “op hol is geslagen”

Houd er rekening mee dat elke distributie tools biedt voor het correct stoppen/starten/herstarten/herladen van algemene services, zoals service in SysV-gebaseerde systemen of systemctl in systemd-gebaseerde systemen.

Als een proces niet op deze hulpprogramma's reageert, kunt u het met geweld beëindigen door het het SIGKILL-signaal ernaar te sturen.

ps -ef | grep apache
kill -9 3821

Dus... Wat is er gebeurd/gebeurt er?

Wanneer er enige vorm van storing in het systeem is geweest (of het nu een stroomstoring is, een hardwarestoring, een geplande of ongeplande onderbreking van een proces, of welke abnormaliteit dan ook), wordt ingelogd op /var/log zijn je beste vrienden om te bepalen wat er is gebeurd of wat de oorzaak kan zijn van de problemen waarmee je wordt geconfronteerd.

cd /var/log

Sommige items in /var/log zijn gewone tekstbestanden, andere zijn mappen en weer andere zijn gecomprimeerde bestanden van geroteerde (historische) logs. U zult die met het woord fout in hun naam willen controleren, maar het inspecteren van de rest kan ook van pas komen.

Voorbeeld 11: Logboeken onderzoeken op fouten in processen

Stel je dit scenario voor. Uw LAN-clients kunnen niet afdrukken op netwerkprinters. De eerste stap om deze situatie op te lossen is naar de map /var/log/cups gaan en kijken wat daar staat.

U kunt de opdracht tail gebruiken om de laatste 10 regels van het error_log-bestand weer te geven, of tail -f error_log voor een realtime weergave van het logbestand.

cd /var/log/cups
ls
tail error_log

De bovenstaande schermafbeelding biedt nuttige informatie om te begrijpen wat uw probleem zou kunnen veroorzaken. Houd er rekening mee dat het volgen van de stappen of het corrigeren van de slechte werking van het proces het algehele probleem misschien nog steeds niet oplost, maar als u er vanaf het begin aan gewend raakt om de logboeken te controleren telkens wanneer zich een probleem voordoet (of het nu een lokaal of een netwerkprobleem is), kunt u zal zeker op de goede weg zijn.

Voorbeeld 12: De logboeken onderzoeken op hardwarefouten

Hoewel hardwarefouten lastig kunnen zijn om op te lossen, moet u de dmesg- en berichtenlogboeken en grep controleren op woorden die verband houden met een vermoedelijk defect hardwareonderdeel.

De onderstaande afbeelding is afkomstig uit /var/log/messages nadat je met de volgende opdracht naar het woord error hebt gezocht:

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

We kunnen zien dat we een probleem hebben met twee opslagapparaten: /dev/sdb en /dev/sdc, die op hun beurt een probleem veroorzaken met de RAID-array.

Conclusie

In dit artikel hebben we enkele hulpmiddelen onderzocht die u kunnen helpen altijd op de hoogte te zijn van de algehele status van uw systeem. Bovendien moet u ervoor zorgen dat uw besturingssysteem en geïnstalleerde pakketten zijn bijgewerkt naar de nieuwste stabiele versies. En vergeet nooit de logboeken te controleren! Dan ga je de goede kant op om de definitieve oplossing voor eventuele problemen te vinden.

Laat gerust uw opmerkingen, suggesties of vragen achter (als u die heeft) via het onderstaande formulier.