Diagnosztizálja a Linux kiszolgáló betöltési problémáit egy egyszerű parancsfájl segítségével
Ha bármilyen időtartamig adminisztrátor voltál, biztosan felfedezted azokat a helyzeteket, ahol a kiszolgáló a CPU-használatban vagy a memóriahasználatban és / vagy a terhelési szintekben jelentkezik. A 'top' futása nem mindig ad választ a válaszra. Szóval hogyan találja meg azokat a csúszós folyamatokat, amelyek a rendszer erőforrásait rágják, hogy megölhessék?
A következő parancsfájl segíthet. Egy webkiszolgálóra írták, így néhány olyan része van, amelyek kifejezetten httpd folyamatokat keresnek, és egyes részeket, amelyek a MySQL-rel foglalkoznak. A kiszolgáló telepítésétől függően egyszerűen csak kommentálja / törölje azokat, és adjon hozzá másokat. Ezt kiindulási pontként kell használni.
A forgatókönyv ezen verziójának előfeltételei a GNU Általános Nyilvános Licenc alatt, a mytop néven megjelent freeware (elérhető a http://jeremy.zawodny.com/mysql/mytop/ címen), ami fantasztikus eszköz a MySQL teljesítményének ellenőrzésére. Idősödik, de mégis jól működik itt.
Emellett a mutt-t használom mailerként is - lehet, hogy módosítani szeretnéd a forgatókönyvet, hogy egyszerűen használd a linux beépített levelező segédprogramot. Minden óra cronon keresztül futok; állítsa be, ahogyan tetszik. Oh - és ez a parancsfájl gyökérként fut, mivel a szerver egyes védett területeiről olvas.
Tehát kezdjünk, mi?
Először állítsa be a script változóit:
#! / Bin / bash
#
# Script, hogy ellenőrizze a rendszerterhelés átlagos szintjét, hogy megpróbálja meghatározni
# milyen folyamatokat vesz igénybe túl magasra…
#
# 07Jul2010 tjones
#
# beállított környezet
dt = "dátum +% d% b% Y-% X"
# Nyilvánvaló, hogy változtassa meg a következő könyvtárakat, ahol a naplófájlokat ténylegesen megőrzik
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfile = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysqlLog = "/ var / log / mysqld.log"
# az első mailstop a jelentések standard e-mailje. A második a mobiltelefonra vonatkozik (leolvasott jelentéssel)
Mailstop = "[email protected]"
mailstop1 = "[email protected]"
gép = "hostname"
# A következő három a mytop használatára vonatkozik - használjon egy db felhasználó, akinek tisztességes jogai vannak
dbusr = "felhasználónév"
dbpw = "jelszó"
db = "yourdatabasename"
# Az alábbiakban a terhelés szintjét ellenőrizni kell - 10 nagyon magas, ezért érdemes csökkenteni.
levelToCheck = 10
Ezután ellenőrizze a terhelési szintet, hogy lássa, hogy folytatódjon-e a parancsfájl:
# Változók beállítása a rendszerből:
loadLevel = "cat / proc / loadavg | awk" print $ 1 "
loadLevel = $ (printf "% 0.f" $ loadLevel)# Ha a terhelési szint nagyobb, mint amennyit akar, indítsa el a szkriptet. Ellenkező esetben kilép a 0-ból
ha [$ loadLevel -gt $ levelToCheck]; azután
echo ""> $ tmpfile
echo "**************************************" >> $ tmpfile
echo "Dátum: $ dt" >> $ tmpfile
echo "Rendszerterhelés és folyamatok ellenőrzése" >> $ tmpfile
echo "**************************************" >> $ tmpfile
És folytassa az ellenőrzéseket, írja az eredményeket az ideiglenes fájlba. Elemek hozzáadása vagy törlése innen, ha alkalmazható a helyzetedre:
# Kapjon több változót a rendszerből:
httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"# Az aktuális terhelési szint megjelenítése:
echo "Load Level: $ loadLevel" >> $ tmpfile
echo "************************************************ * ">> $ tmpfile# A jelenleg futó httpd-folyamatok száma (a gyerekeket nem tartalmazza):
echo "A httpd folyamatok száma: $ httpdProcesses" >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Folyamatlista megjelenítése:
echo "Most futó folyamatok:" >> $ tmpfile
ps f -ef >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Az aktuális MySQL-információk megjelenítése:
echo "A mytop eredményei:" >> $ tmpfile
/ usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile
Figyeljük meg a felső parancsot, két temp fájlba írunk. Az egyik a sokkal kisebb üzenet a mobiltelefonra. Ha nem akarja, hogy reggel három órakor sürgősen értesüljön a mobiltelefonról, akkor ezt megteheti (és vegye ki a második levelező rutint később a szkriptben).
# Jelenlegi top megjelenítése:
echo "top now:" >> $ tmpfile
echo "top now:" >> $ topfile
/ usr / bin / top -b -n1 >> $ tmpfile
/ usr / bin / top -b -n1 >> $ topfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile
További ellenőrzések:
# Jelenlegi kapcsolatok megjelenítése:
echo "netstat most mutatja:" >> $ tmpfile
/ bin / netstat -p >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Ellenőrizze a lemezterületet
echo "lemezterület:" >> $ tmpfile
/ bin / df -k >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile
Ezután írja be az ideiglenes fájl tartalmát egy állandóbb naplófájlba, és e-mailben küldje el az eredményeket a megfelelő feleknek. A második levelezés az az eredmény, amely egyszerűen a "top" szabványból áll:
# Eredmények küldése naplófájlba:
/ bin / cat $ tmpfile >> $ naplófájl# És e-mail eredmények a sysadmin-hoz:
/ usr / bin / mutt -s "$ gép nagy terhelési szinttel rendelkezik! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile
És akkor néhány takarítás és kilépés:
# Ezután távolítsa el a temp fájlt:
rm $ tmpfile
rm $ topfile
fi#
kilépés 0
Remélhetőleg ez segít valakinek. Teljesen összeállított parancsfájl:
#! / Bin / bash
#
# Script a rendszerterhelés átlagszintjének ellenőrzésére, hogy megpróbálja meghatározni, hogy milyen folyamatok vannak
# túlságosan magasra véve…
#
# beállított környezet
dt = "dátum +% d% b% Y-% X"
# Nyilvánvaló, hogy változtassa meg a következő könyvtárakat, ahol a naplófájlokat ténylegesen megőrzik
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfile = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysqlLog = "/ var / log / mysqld.log"
# az első mailstop a jelentések standard e-mailje. A második a mobiltelefonra vonatkozik (leolvasott jelentéssel)
Mailstop = "[email protected]"
mailstop1 = "[email protected]"
gép = "hostname"
# A következő három a mytop használatára vonatkozik - használjon egy db felhasználó, akinek tisztességes jogai vannak
dbusr = "felhasználónév"
dbpw = "jelszó"
db = "yourdatabasename"
# Az alábbiakban a terhelés szintjét ellenőrizni kell - 10 nagyon magas, ezért érdemes csökkenteni.
levelToCheck = 10
# Változók beállítása a rendszerből:
loadLevel = "cat / proc / loadavg | awk" print $ 1 "
loadLevel = $ (printf "% 0.f" $ loadLevel)# Ha a terhelési szint nagyobb, mint amennyit akar, indítsa el a szkriptet. Ellenkező esetben kilép a 0-ból
ha [$ loadLevel -gt $ levelToCheck]; azután
echo ""> $ tmpfile
echo "**************************************" >> $ tmpfile
echo "Dátum: $ dt" >> $ tmpfile
echo "Rendszerterhelés és folyamatok ellenőrzése" >> $ tmpfile
echo "**************************************" >> $ tmpfile# Kapjon több változót a rendszerből:
httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"# Az aktuális terhelési szint megjelenítése:
echo "Load Level: $ loadLevel" >> $ tmpfile
echo "************************************************ * ">> $ tmpfile# A jelenleg futó httpd-folyamatok száma (a gyerekeket nem tartalmazza):
echo "A httpd folyamatok száma: $ httpdProcesses" >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Folyamatlista megjelenítése:
echo "Most futó folyamatok:" >> $ tmpfile
ps f -ef >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Az aktuális MySQL-információk megjelenítése:
echo "A mytop eredményei:" >> $ tmpfile
/ usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Jelenlegi top megjelenítése:
echo "top now:" >> $ tmpfile
echo "top now:" >> $ topfile
/ usr / bin / top -b -n1 >> $ tmpfile
/ usr / bin / top -b -n1 >> $ topfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Jelenlegi kapcsolatok megjelenítése:
echo "netstat most mutatja:" >> $ tmpfile
/ bin / netstat -p >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Ellenőrizze a lemezterületet
echo "lemezterület:" >> $ tmpfile
/ bin / df -k >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Eredmények küldése naplófájlba:
/ bin / cat $ tmpfile >> $ naplófájl# És e-mail eredmények a sysadmin-hoz:
/ usr / bin / mutt -s "$ gép nagy terhelési szinttel rendelkezik! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile# Ezután távolítsa el a temp fájlt:
rm $ tmpfile
rm $ topfile
fi#
kilépés 0