Koduleht » kuidas » Diagnoosige Linuxi serveri laadimisprobleeme lihtsa skriptiga

    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