Hvis du har været administrator i nogen længere tid, har du bestemt opdaget situationer, hvor en server spidser i CPU-brug eller hukommelsesudnyttelse og / eller belastningsniveauer. At løbe 'top' giver dig heller ikke altid svaret. Så hvordan finder du de luskede processer, der tygger dine systemressourcer for at kunne dræbe dem?
Følgende script kan muligvis hjælpe. Det blev skrevet til en webserver, så det har nogle dele af det, der specifikt leder efter httpd-processer og nogle dele, der beskæftiger sig med MySQL. Afhængigt af din serverudrulning skal du blot kommentere / slette disse sektioner og tilføje andre. Det skal bruges som udgangspunkt.
Forudsætninger for denne version af scriptet er nogle freeware frigivet under GNU General Public License kaldet mytop (tilgængelig på
http://jeremy.zawodny.com/mysql/mytop/
), som er et fantastisk værktøj til at kontrollere, hvordan MySQL klarer sig. Det bliver gammelt, men fungerer stadig godt til vores formål her.
Derudover bruger jeg mutt som mailer - du vil måske ændre scriptet for blot at bruge det indbyggede Linux-værktøj til 'mail'. Jeg kører det via cron hver time; juster, som du finder passende. Åh - og dette script skal køre som root, da det læser fra nogle beskyttede områder på serveren.
Så lad os komme i gang, skal vi?
Indstil først dine scriptvariabler:
#! / Bin / Bash
#
# Script til at kontrollere systembelastningens gennemsnitlige niveauer for at prøve at bestemme
# hvilke processer der tager det for højt ...
#
# 07Jul2010 tjones
#
# sæt miljø
dt = `dato +% d% b% Y-% X`
# Du skal selvfølgelig ændre følgende mapper, hvor dine logfiler faktisk opbevares
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfil = "/ tmp / checkSystemLoad.log"
msgLog="/var/log/messages"
mysqlLog="/var/log/mysqld.log"
# den første mailstop er standard e-mail til rapporter. Den anden er til mobiltelefon (med en pareret rapport)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
maskine = `værtsnavn`
# De følgende tre er til mytop-brug - brug en db-bruger, der har anstændige rettigheder
dbusr = "brugernavn"
dbpw = "adgangskode"
db = "dit databasenavn"
# Følgende er belastningsniveauet, du skal kontrollere - 10 er virkelig højt, så du vil måske sænke det.
levelToCheck = 10
Tjek derefter dit belastningsniveau for at se, om scriptet skal fortsætte:
# Indstil variabler fra systemet:
loadLevel = `cat / proc / loadavg | awk '{print $1}' '
loadLevel = $ (printf "% 0.f" $ loadLevel)# hvis belastningsniveauet er større, end du vil, skal du starte scriptprocessen. Ellers skal du afslutte 0
hvis [ $loadLevel -gt $levelToCheck ]; derefter
ekko ""> $ tmpfile
ekko "**************************************" >> $ tmpfile
ekko "Dato: $ dt" >> $ tmpfile
ekko "Kontroller systembelastning og processer" >> $ tmpfile
ekko "**************************************" >> $ tmpfile