Ako ste bili administrator za bilo koju duljinu vremena, zasigurno ste otkrili situacije u kojima se poslužitelj nalazi u korištenju procesora ili korištenju memorije i / ili razine opterećenja. Trčanje 'vrh' neće vam uvijek dati odgovor. Pa kako možete pronaći one tajne postupke koji gube svoje resurse sustava kako bi ih mogli ubiti?
Sljedeća bi skripta mogla pomoći. Napisana je za web poslužitelj, tako da ima neke dijelove koji posebno traže httpd procese i neke dijelove koji se bave MySQL-om. Ovisno o raspoređivanju poslužitelja, jednostavno komentirajte / izbrišite te odjeljke i dodajte druge. Treba se koristiti za polaznu točku.
Preduvjeti za ovu verziju skripte su neki freeware izdani pod GNU Općom javnom licencom pod nazivom mytop (dostupno na http://jeremy.zawodny.com/mysql/mytop/), što je fantastičan alat za provjeru izvedbe MySQL-a. Stari je, ali ovdje i dalje djeluje sjajno za naše svrhe.
Osim toga, koristim mutt kao mailer - preporučujemo da promijenite skriptu da jednostavno koristite linux izgrađen u usluzi "pošta". Vodim ga putem cron svakog sata; prilagodite kako vam odgovara. Oh - i ta se skripta mora izvoditi kao korijen jer se čita iz nekih zaštićenih područja poslužitelja.
Počnimo, zar ne?
Najprije postavite varijable skripte:
#! / Bin / bash
#
# Skripta kako biste provjerili prosječne razine učitavanja sustava kako biste pokušali odrediti
# što procesi uzimaju pretjerano visoku ...
#
# 07Jul2010 tjones
#
# set okruženje
dt = "datum +% d% b% Y-% X"
# Očito, promijenite sljedeće direktorije na mjesto gdje se vaše dnevničke datoteke čuvaju
tmpfile = "/ TMP / checkSystemLoad.tmp"
logfile = "/ TMP / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysqlLog = "/ var / log / mysqld.log"
# prvi mailstop je standardna e-adresa za izvješća. Drugi je za mobitel (s raščlanjenim izvješćem)
poštanskog pretinca = "[email protected]"
mailstop1 = "[email protected]"
Stroj = „ime računala”
# Sljedeća tri su za korištenje mytop - koristite db korisnika koji ima pristojna prava
dbusr = "ime"
dbpw = "lozinka"
db = "yourdatabasename"
# Sljedeći je razina opterećenja za provjeru - 10 je stvarno visoka, pa biste ga mogli smanjiti.
levelToCheck = 10
Zatim provjerite razinu opterećenja kako biste vidjeli hoće li se skripta nastaviti:
# Postavite varijable iz sustava:
loadLevel = "mačka / proc / loadavg | awk" print $ 1 "
loadLevel = $ (printf "% 0.f" $ loadLevel)
# ako je razina opterećenja veća nego što želite, pokrenite postupak skriptiranja. U suprotnom, izađite iz 0
ako [$ loadLevel -gt $ levelToCheck]; zatim
echo ""> $ tmpfile
echo "**************************************" >> $ tmpfile
echo "Datum: $ dt" >> $ tmpfile
eho "Provjeri opterećenje sustava i procesi" >> $ tmpfile
echo "**************************************" >> $ tmpfile
I nastavite kroz provjere, zapisujući rezultate u privremenu datoteku. Dodajte ili izbrišite stavke iz ovdje gdje je to primjenjivo na vašu situaciju:
# Dobivanje više varijabli iz sustava:
httpdProcesses = "ps -def | grep httpd | grep -v grep | wc-l"
# Prikaži trenutačnu razinu opterećenja:
eho "Razina opterećenja je: $ loadLevel" >> $ tmpfile
jeka "************************************************ * ">> $ tmpfile# Prikaži broj pokrenutih httpd procesa (ne uključujući djecu):
echo "Broj httpd procesa sada: $ httpdProcesses" >> $ tmpfile
jeka "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Prikaži popis postupaka:
echo "Procesi sada prikazuju:" >> $ tmpfile
ps f -ef >> $ tmpfile
jeka "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Prikaži trenutne MySQL informacije:
echo "Rezultati iz mytop:" >> $ tmpfile
/ usr / bin / mytop -u $ dbusr -p $ dbpw-b -d $ db >> $ tmpfile
jeka "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile
Obavijest s gornjom naredbom pišemo na dvije temp datoteke. Jedan je za mnogo manju poruku mobitelu. Ako ne želite hitno obavijestiti mobilne telefone u tri ujutro, možete to izvaditi (i izvadite drugu mailing rutinu kasnije u skripti).
# Prikaži trenutačni vrh:
echo "vrh sada pokazuje:" >> $ tmpfile
echo "vrh sada pokazuje:" >> $ topfile
/ usr / bin / top-b -n1 >> $ tmpfile
/ usr / bin / vrh -b -n1 >> $ topfile
jeka "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile
Više provjera:
# Prikaži trenutne veze:
echo "netstat sada pokazuje:" >> $ tmpfile
/ bin / netstat -p >> $ tmpfile
jeka "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile
# Provjerite prostor na disku
echo "prostora na disku:" >> $ tmpfile
/ bin / df -k >> $ tmpfile
jeka "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile
Zatim napišite sadržaj privremene datoteke u trajniju dnevničku datoteku i pošaljite e-mail rezultate odgovarajućim strankama. Druga pošta je rezultat koji se sastoji samo od standarda iz "vrha":
# Pošalji rezultate zapisnika:
/ bin / cat $ tmpfile >> $ logfile
# I rezultati e-pošte sysadmin:
/ usr / bin / mutt -s "$ stroj ima visoku razinu opterećenja - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$ tmpfile / usr / bin / mutt -s "$ stroj ima visoku razinu opterećenja ! - $ dt "$ mailstop1> $ logfile
I onda neki domaćin i izlaz:
# A zatim uklonite datoteku temp:
rm $ tmpfile
rm $ topfile
fi
#
izlaz 0
Nadamo se da ovo pomaže nekome vani. Potpuno sastavljena skripta je:
#! / Bin / bash
#
# Skripta za provjeru prosječnih razina opterećenja sustava kako bi se utvrdili koji su procesi
# uzimajući ga pretjerano visoko ...
#
# set okruženje
dt = "datum +% d% b% Y-% X"
# Očito, promijenite sljedeće direktorije na mjesto gdje se vaše dnevničke datoteke čuvaju
tmpfile = "/ TMP / checkSystemLoad.tmp"
logfile = "/ TMP / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysqlLog = "/ var / log / mysqld.log"
# prvi mailstop je standardna e-adresa za izvješća. Drugi je za mobitel (s raščlanjenim izvješćem)
poštanskog pretinca = "[email protected]"
mailstop1 = "[email protected]"
Stroj = „ime računala”
# Sljedeća tri su za korištenje mytop - koristite db korisnika koji ima pristojna prava
dbusr = "ime"
dbpw = "lozinka"
db = "yourdatabasename"
# Sljedeći je razina opterećenja za provjeru - 10 je stvarno visoka, pa biste ga mogli smanjiti.
levelToCheck = 10
# Postavite varijable iz sustava:
loadLevel = "mačka / proc / loadavg | awk" print $ 1 "
loadLevel = $ (printf "% 0.f" $ loadLevel)
# ako je razina opterećenja veća nego što želite, pokrenite postupak skriptiranja. U suprotnom, izađite iz 0
ako [$ loadLevel -gt $ levelToCheck]; zatim
echo ""> $ tmpfile
echo "**************************************" >> $ tmpfile
echo "Datum: $ dt" >> $ tmpfile
eho "Provjeri opterećenje sustava i procesi" >> $ tmpfile
echo "**************************************" >> $ tmpfile# Dobivanje više varijabli iz sustava:
httpdProcesses = "ps -def | grep httpd | grep -v grep | wc-l"# Prikaži trenutačnu razinu opterećenja:
eho "Razina opterećenja je: $ loadLevel" >> $ tmpfile
jeka "************************************************ * ">> $ tmpfile# Prikaži broj pokrenutih httpd procesa (ne uključujući djecu):
echo "Broj httpd procesa sada: $ httpdProcesses" >> $ tmpfile
jeka "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Prikaži popis postupaka:
echo "Procesi sada prikazuju:" >> $ tmpfile
ps f -ef >> $ tmpfile
jeka "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Prikaži trenutne MySQL informacije:
echo "Rezultati iz mytop:" >> $ tmpfile
/ usr / bin / mytop -u $ dbusr -p $ dbpw-b -d $ db >> $ tmpfile
jeka "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Prikaži trenutačni vrh:
echo "vrh sada pokazuje:" >> $ tmpfile
echo "vrh sada pokazuje:" >> $ topfile
/ usr / bin / top-b -n1 >> $ tmpfile
/ usr / bin / vrh -b -n1 >> $ topfile
jeka "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Prikaži trenutne veze:
echo "netstat sada pokazuje:" >> $ tmpfile
/ bin / netstat -p >> $ tmpfile
jeka "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Provjerite prostor na disku
echo "prostora na disku:" >> $ tmpfile
/ bin / df -k >> $ tmpfile
jeka "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Pošalji rezultate zapisnika:
/ bin / cat $ tmpfile >> $ logfile# I rezultati e-pošte sysadmin:
/ usr / bin / mutt -s "$ stroj ima visoku razinu opterećenja - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$ tmpfile / usr / bin / mutt -s "$ stroj ima visoku razinu opterećenja ! - $ dt "$ mailstop1> $ logfile# A zatim uklonite datoteku temp:
rm $ tmpfile
rm $ topfile
fi#
izlaz 0