Diagnoosige Linuxi serveri laadimisprobleeme lihtsa skriptiga
Kui olete olnud mõne aja jooksul administraator, olete kindlasti avastanud olukordi, kus serveri tipus on CPU kasutamine või mälu kasutamine ja / või koormustasemed. "Top" käivitamine ei anna teile alati vastust. Niisiis, kuidas sa leiad need loid protsessid, mis närivad teie süsteemi ressursse, et saaksite tappa?
Järgmine skript võib olla abiks. See oli kirjutatud veebiserverile, nii et sellel on mõned osad, mis otsivad just httpd-protsesse ja mõningaid osi, mis käsitlevad MySQL-i. Sõltuvalt serveri kasutuselevõtust lihtsalt kommenteerige / kustutage need osad ja lisage teised. Seda tuleks kasutada lähtepunktiks.
Skripti selle versiooni eeldused on mõned vabavara, mis on avaldatud GNU üldise avaliku litsentsi all, mida nimetatakse mytopiks (saadaval aadressil http://jeremy.zawodny.com/mysql/mytop/), mis on suurepärane vahend, et kontrollida, kuidas MySQL toimib. See vananeb, kuid töötab siiani suurepäraselt.
Lisaks kasutan postitajana mutt-i - võite muuta skripti, et lihtsalt kasutada linuxi ehitatud utiliiti. Käin seda iga tunni tagant croni kaudu; kohandage, nagu näete. Oh - ja see skript peab töötama rootina, kuna see loeb serveri mõningatest kaitstud aladest.
Nii et alustame, kas me?
Esmalt määrake oma skriptimuutujad:
#! / bin / bash
#
# Script, et kontrollida süsteemi koormuse keskmise taseme määramist
# millised protsessid võtavad seda liiga kõrgeks…
#
# 07Jul2010 tjones
#
# seatud keskkond
dt = "kuupäev +% d% b% Y-% X"
# Ilmselgelt muutke järgmisi katalooge, kuhu teie logifailid tegelikult hoitakse
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfile = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysqlLog = "/ var / log / mysqld.log"
# esimene mailstop on aruannete standardne e-kiri. Teine on mobiiltelefoni jaoks (koos allapoole saadetud aruandega)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
machine = "hostname"
# Järgmised kolm on mõeldud mytop kasutamiseks - kasutage db-kasutajat, kellel on korralikud õigused
dbusr = "kasutajanimi"
dbpw = "parool"
db = "yourdatabasename"
# Järgnev on koormuse tase, et kontrollida - 10 on tõesti kõrge, nii et võiksite seda alandada.
levelToCheck = 10
Seejärel kontrollige oma koormustaset, et näha, kas skript peaks jätkuma:
# Määrake süsteemist muutujad:
loadLevel = "kass / proc / loadavg | awk" print $ 1 "
loadLevel = $ (printf "% 0.f" $ loadLevel)# kui koormuse tase on suurem kui soovite, käivitage skripti protsess. Vastasel juhul väljuge 0-st
kui [$ loadLevel -gt $ levelToCheck]; siis
echo ""> $ tmpfile
echo "**************************************" >> $ tmpfile
echo "Kuupäev: $ dt" >> $ tmpfile
echo "Check System Load & Processes" >> $ tmpfile
echo "**************************************" >> $ tmpfile
Ja jätkake kontrollide abil, kirjutades tulemused ajutisele failile. Lisage või kustutage siit üksusi, kui see on teie olukorrale kohaldatav:
# Süsteemist saate rohkem muutujaid:
httpdProcesses = "ps -def | grep httpd | grep -v grep | wc-l"# Näita praegust koormustaset:
echo "Load Level: $ loadLevel" >> $ tmpfile
echo "************************************************ * ">> $ tmpfile# Kuva praegu töötavate httpd protsesside arv (va lapsed):
echo "httpd protsesside arv praegu: $ httpdProcesses" >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Näita protsesside loendit:
echo "Praegu töötavad protsessid:" >> $ tmpfile
ps f -ef >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Näita praegust MySQL-i infot:
echo "Mytopi tulemused:" >> $ tmpfile
/ usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile
Teade tippkäsuga kirjutame kahele temp-failile. Üks on palju väiksem sõnum mobiiltelefonile. Kui te ei soovi, et mobiiltelefoni hoiatusteave oleks hommikul kolmel korral hädavajalik, saate selle välja võtta (ja võta teine skript hiljem välja).
# Kuva praegune tipp:
echo "top nüüd näitab:" >> $ tmpfile
kaja "top nüüd näitab:" >> $ topfile
/ usr / bin / top -b -n1 >> $ tmpfile
/ usr / bin / top -b -n1 >> $ topfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile
Rohkem kontrolle:
# Kuva praegused ühendused:
echo "netstat näitab nüüd:" >> $ tmpfile
/ bin / netstat -p >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Kontrollige kettaruumi
kaja "kettaruum:" >> $ tmpfile
/ bin / df -k >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile
Seejärel kirjutage ajutise faili sisu püsivamale logifailile ja saatke tulemused vastavatele isikutele. Teine postitus on paralleeritud tulemused, mis koosnevad lihtsalt standardist „top”:
# Saada tulemused logifaili:
/ bin / cat $ tmpfile >> $ logifail# Ja e-posti tulemused sysadminile:
/ usr / bin / mutt -s "$ masinal on kõrge koormustase! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile
Ja siis mõni majapidamine ja väljumine:
# Ja seejärel eemaldage temp-fail:
rm $ tmpfile
rm $ topfile
fi#
väljumine 0
Loodetavasti aitab see keegi seal. Täielikult kokku pandud skript on:
#! / bin / bash
#
# Script, et kontrollida süsteemi koormuse keskmist taset, et teha kindlaks, millised protsessid on
# selle liiga kõrge võtmine…
#
# seatud keskkond
dt = "kuupäev +% d% b% Y-% X"
# Ilmselgelt muutke järgmisi katalooge, kuhu teie logifailid tegelikult hoitakse
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfile = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysqlLog = "/ var / log / mysqld.log"
# esimene mailstop on aruannete standardne e-kiri. Teine on mobiiltelefoni jaoks (koos allapoole saadetud aruandega)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
machine = "hostname"
# Järgmised kolm on mõeldud mytop kasutamiseks - kasutage db-kasutajat, kellel on korralikud õigused
dbusr = "kasutajanimi"
dbpw = "parool"
db = "yourdatabasename"
# Järgnev on koormuse tase, et kontrollida - 10 on tõesti kõrge, nii et võiksite seda alandada.
levelToCheck = 10
# Määrake süsteemist muutujad:
loadLevel = "kass / proc / loadavg | awk" print $ 1 "
loadLevel = $ (printf "% 0.f" $ loadLevel)# kui koormuse tase on suurem kui soovite, käivitage skripti protsess. Vastasel juhul väljuge 0-st
kui [$ loadLevel -gt $ levelToCheck]; siis
echo ""> $ tmpfile
echo "**************************************" >> $ tmpfile
echo "Kuupäev: $ dt" >> $ tmpfile
echo "Check System Load & Processes" >> $ tmpfile
echo "**************************************" >> $ tmpfile# Süsteemist saate rohkem muutujaid:
httpdProcesses = "ps -def | grep httpd | grep -v grep | wc-l"# Näita praegust koormustaset:
echo "Load Level: $ loadLevel" >> $ tmpfile
echo "************************************************ * ">> $ tmpfile# Kuva praegu töötavate httpd protsesside arv (va lapsed):
echo "httpd protsesside arv praegu: $ httpdProcesses" >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Näita protsesside loendit:
echo "Praegu töötavad protsessid:" >> $ tmpfile
ps f -ef >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Näita praegust MySQL-i infot:
echo "Mytopi tulemused:" >> $ tmpfile
/ usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Kuva praegune tipp:
echo "top nüüd näitab:" >> $ tmpfile
kaja "top nüüd näitab:" >> $ topfile
/ usr / bin / top -b -n1 >> $ tmpfile
/ usr / bin / top -b -n1 >> $ topfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Kuva praegused ühendused:
echo "netstat näitab nüüd:" >> $ tmpfile
/ bin / netstat -p >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Kontrollige kettaruumi
kaja "kettaruum:" >> $ tmpfile
/ bin / df -k >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Saada tulemused logifaili:
/ bin / cat $ tmpfile >> $ logifail# Ja e-posti tulemused sysadminile:
/ usr / bin / mutt -s "$ masinal on kõrge koormustase! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile# Ja seejärel eemaldage temp-fail:
rm $ tmpfile
rm $ topfile
fi#
väljumine 0