Als je al een tijdje een admin bent, heb je zeker situaties ontdekt waarin een server piekt in CPU-gebruik of geheugengebruik en / of belastingsniveaus. Als u 'top' uitvoert, krijgt u ook niet altijd het antwoord. Dus hoe vind je die stiekeme processen die je systeembronnen opslokken om ze te kunnen doden?
Het volgende script kan mogelijk helpen. Het is geschreven voor een webserver, dus sommige delen ervan zijn specifiek op zoek naar httpd-processen en sommige delen die met MySQL te maken hebben. Afhankelijk van uw serverimplementatie kunt u deze secties becommentariëren / verwijderen en andere toevoegen. Het moet als uitgangspunt worden gebruikt.
Vereisten voor deze versie van het script zijn enkele freeware die is vrijgegeven onder de GNU General Public License genaamd mytop (beschikbaar op
http://jeremy.zawodny.com/mysql/mytop/
), wat een fantastische tool is om te controleren hoe MySQL presteert. Het wordt oud, maar werkt nog steeds prima voor onze doeleinden hier.
Bovendien gebruik ik mutt als de mailer - misschien wil je het script wijzigen om simpelweg het in linux ingebouwde `mail` hulpprogramma te gebruiken. Ik voer het elk uur uit via cron; pas naar eigen inzicht aan. Oh - en dit script moet als root worden uitgevoerd, omdat het uit sommige beschermde delen van de server leest.
Dus laten we beginnen, zullen we?
Stel eerst uw scriptvariabelen in:
#! / Bin / Bash
#
# Script om de gemiddelde niveaus van de systeembelasting te controleren om te proberen te bepalen
# welke processen nemen het overdreven hoog ...
#
# 07jul2010 tjones
#
# omgeving instellen
dt = `datum +% d% b% Y-% X`
# Verander natuurlijk de volgende mappen in waar uw logbestanden daadwerkelijk worden bewaard
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfile = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / berichten"
mysql Log = "/ var / log / mysqld.log"
# de eerste mailstop is standaard e-mail voor rapportages. De tweede is voor mobiele telefoons (met een beperkt rapport)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
machine = `hostnaam`
# De volgende drie zijn voor mytop-gebruik - gebruik een db-gebruiker met behoorlijke rechten
dbusr = "gebruikersnaam"
dbpw = "wachtwoord"
db = "uwdatabasenaam"
# Het volgende is het te controleren belastingsniveau - 10 is erg hoog, dus misschien wilt u het verlagen.
levelToCheck = 10
Controleer vervolgens uw laadniveau om te zien of het script moet doorgaan:
# Variabelen instellen vanuit systeem:
loadLevel = `cat / proc / loadavg | awk '{print $1}' '
loadLevel = $ (printf "% 0.f" $ loadLevel)# start het scriptproces als het laadniveau groter is dan u wilt. Anders sluit u 0 af
als [ $loadLevel -gt $levelToCheck ]; vervolgens
echo ""> $ tmpfile
echo "***************************************" >> $ tmpfile
echo "Datum: $ dt" >> $ tmpfile
echo "Controleer systeembelasting en processen" >> $ tmpfile
echo "***************************************" >> $ tmpfile