Pagrindinis » kaip » Diagnozuokite „Linux“ serverio įkrovimo problemas naudodami paprastą scenarijų

    Diagnozuokite „Linux“ serverio įkrovimo problemas naudodami paprastą scenarijų

    Jei buvote administratorius bet kokiam laikotarpiui, jūs tikrai radote situacijų, kai serverio šuoliai vyksta naudojant procesoriaus naudojimą arba atminties panaudojimą ir (arba) apkrovos lygius. „Top“ važiavimas ne visada suteiks jums atsakymą. Taigi, kaip jūs surasite tuos neryškius procesus, kurie kenkia jūsų sistemos ištekliams, kad galėtumėte nužudyti?

    Šis scenarijus gali padėti. Jis buvo parašytas žiniatinklio serveriui, todėl turi tam tikras jo dalis, kurios konkrečiai ieško httpd procesų ir kai kurių dalių, kurios susijusios su „MySQL“. Priklausomai nuo jūsų serverio diegimo, tiesiog komentuokite / ištrinkite tuos skyrius ir pridėkite kitus. Jis turėtų būti naudojamas pradiniam taškui.

    Šios scenarijaus versijos prielaidos yra nemokama, išleista pagal GNU Bendrąją viešąją licenciją, vadinamą „mytop“ (galima rasti adresu http://jeremy.zawodny.com/mysql/mytop/), kuri yra fantastiška priemonė patikrinti, kaip veikia „MySQL“. Jis sensta, tačiau vis dar puikiai tinka mūsų tikslams.
    Be to, aš naudoju „mutt“ kaip pašto siuntėją - galbūt norėsite pakeisti scenarijų, kad galėtumėte naudoti „linux“ pastatytą „pašto“ įrankį. Kas valandą jį paleisiu per croną; koreguokite, kaip matote. Oh - ir šis scenarijus turi paleisti kaip root, nes jis skaitomas iš kai kurių saugomų serverio zonų.

    Taigi, pradėkime, ar mes?

    Pirma, nustatykite scenarijaus kintamuosius:

    #! / bin / bash
    #
    # Script, kad patikrintumėte sistemos apkrovos vidurkį, kad bandytumėte nustatyti
    # kokie procesai yra per dideli ...
    #
    # 07Jul2010 tjones
    #
    # nustatyti aplinką
    dt = "data +% d% b% Y-% X"
    # Akivaizdu, kad pakeiskite šiuos katalogus, kuriuose faktiškai laikomi jūsų žurnalo failai
    tmpfile = "/ tmp / checkSystemLoad.tmp"
    logfile = "/ tmp / checkSystemLoad.log"
    msgLog = "/ var / log / messages"
    mysqlLog = "/ var / log / mysqld.log"
    # pirmasis laiškas yra standartinis el. laiškas ataskaitoms. Antrasis skirtas mobilųjį telefoną (su pared žemyn ataskaita)
    mailstop = "[email protected]"
    mailstop1 = "[email protected]"
    machine = "hostname"
    # Šie trys yra skirti naudoti „mytop“ - naudokite „db“ vartotoją, kuris turi tinkamas teises
    dbusr = "naudotojo vardas"
    dbpw = "slaptažodis"
    db = "yourdatabasename"
    # Toliau pateikiamas apkrovos lygis, kad patikrintumėte - 10 yra labai didelis, todėl galbūt norėsite jį sumažinti.
    levelToCheck = 10

    Tada patikrinkite apkrovos lygį, kad pamatytumėte, ar scenarijus turėtų tęsti:

    # Nustatyti kintamuosius iš sistemos:
    loadLevel = "katė / proc / loadavg | awk" print $ 1 "
    loadLevel = $ (printf "% 0.f" $ loadLevel)

    # jei apkrovos lygis yra didesnis nei norite, paleiskite scenarijaus procesą. Priešingu atveju išeiti iš 0

    jei [$ loadLevel -gt $ levelToCheck]; tada
    echo ""> $ tmpfile
    echo "**************************************" >> $ tmpfile
    echo "Data: $ dt" >> $ tmpfile
    echo "Patikrinkite sistemos apkrovą ir procesus" >> $ tmpfile
    echo "**************************************" >> $ tmpfile

    Ir tęskite per patikrinimus, rašydami rezultatus į laikiną failą. Pridėti arba ištrinti elementus iš čia, jei tai įmanoma jūsų situacijai:

    # Gauti daugiau kintamųjų iš sistemos:
    httpdProcesses = "ps -def | grep httpd | grep -v grep | wc-l"

    # Rodyti esamą apkrovos lygį:
    echo "apkrovos lygis: $ loadLevel" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile

    # Rodyti šiuo metu vykdomų httpd procesų skaičių (neįskaitant vaikų):
    echo "httpd procesų skaičius dabar: $ httpdProcesses" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Rodyti proceso sąrašą:
    echo "Dabar vykdomi procesai:" >> $ tmpfile
    ps f -ef >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Rodyti dabartinę MySQL informaciją:
    echo "Mytop rezultatai:" >> $ tmpfile
    / usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    Atkreipkite dėmesį į viršutinę komandą, mes rašome į du temp failus. Vienas iš jų yra daug mažesnis pranešimas mobiliesiems telefonams. Jei nenorite, kad mobiliojo telefono įspėjimai skubiai skambėtų trimis rytais, galite tai padaryti (ir ištrinti antrąjį el. Laiškus vėliau scenarijuje).


    # Rodyti dabartinį viršų:
    echo "top dabar rodo:" >> $ tmpfile
    echo "top dabar rodo:" >> $ topfile
    / usr / bin / top -b -n1 >> $ tmpfile
    / usr / bin / top -b -n1 >> $ topfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    Daugiau patikrinimų:


    # Rodyti dabartinius ryšius:
    echo "netstat dabar rodo:" >> $ tmpfile
    / bin / netstat -p >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Patikrinkite vietos diske
    echo "disk space:" >> $ tmpfile
    / bin / df -k >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    Tada parašykite laikiną failo turinį į nuolatinį žurnalo failą ir išsiųskite rezultatus atitinkamoms šalims. Antrasis laiškas yra lyginamieji rezultatai, susidedantys iš standarto iš „viršaus“:

    # Siųsti rezultatus į žurnalo failą:
    / bin / cat $ tmpfile >> $ logfile

    # Ir el. Laiškų sysadmin rezultatai:
    / usr / bin / mutt -s "$ mašina turi didelį apkrovos lygį! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile

    Ir tada kai kurie namų ruošos ir išvykimo darbai:

    # Ir tada pašalinkite temp failą:
    rm $ tmpfile
    rm $ topfile
    fi

    #
    išeiti 0

    Tikimės, kad tai padės kažkas ten. Pilnai surinktas scenarijus yra:

    #! / bin / bash
    #
    # Script, kad patikrintumėte sistemos apkrovos vidurkį, kad būtų galima nustatyti, kokie procesai yra
    # pernelyg aukštas…
    #
    # nustatyti aplinką
    dt = "data +% d% b% Y-% X"
    # Akivaizdu, kad pakeiskite šiuos katalogus, kuriuose faktiškai laikomi jūsų žurnalo failai
    tmpfile = "/ tmp / checkSystemLoad.tmp"
    logfile = "/ tmp / checkSystemLoad.log"
    msgLog = "/ var / log / messages"
    mysqlLog = "/ var / log / mysqld.log"
    # pirmasis laiškas yra standartinis el. laiškas ataskaitoms. Antrasis skirtas mobilųjį telefoną (su pared žemyn ataskaita)
    mailstop = "[email protected]"
    mailstop1 = "[email protected]"
    machine = "hostname"
    # Šie trys yra skirti naudoti „mytop“ - naudokite „db“ vartotoją, kuris turi tinkamas teises
    dbusr = "naudotojo vardas"
    dbpw = "slaptažodis"
    db = "yourdatabasename"
    # Toliau pateikiamas apkrovos lygis, kad patikrintumėte - 10 yra labai didelis, todėl galbūt norėsite jį sumažinti.
    levelToCheck = 10
    # Nustatyti kintamuosius iš sistemos:
    loadLevel = "katė / proc / loadavg | awk" print $ 1 "
    loadLevel = $ (printf "% 0.f" $ loadLevel)

    # jei apkrovos lygis yra didesnis nei norite, paleiskite scenarijaus procesą. Priešingu atveju išeiti iš 0

    jei [$ loadLevel -gt $ levelToCheck]; tada
    echo ""> $ tmpfile
    echo "**************************************" >> $ tmpfile
    echo "Data: $ dt" >> $ tmpfile
    echo "Patikrinkite sistemos apkrovą ir procesus" >> $ tmpfile
    echo "**************************************" >> $ tmpfile

    # Gauti daugiau kintamųjų iš sistemos:
    httpdProcesses = "ps -def | grep httpd | grep -v grep | wc-l"

    # Rodyti esamą apkrovos lygį:
    echo "apkrovos lygis: $ loadLevel" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile

    # Rodyti šiuo metu vykdomų httpd procesų skaičių (neįskaitant vaikų):
    echo "httpd procesų skaičius dabar: $ httpdProcesses" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Rodyti proceso sąrašą:
    echo "Dabar vykdomi procesai:" >> $ tmpfile
    ps f -ef >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Rodyti dabartinę MySQL informaciją:
    echo "Mytop rezultatai:" >> $ tmpfile
    / usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Rodyti dabartinį viršų:
    echo "top dabar rodo:" >> $ tmpfile
    echo "top dabar rodo:" >> $ topfile
    / usr / bin / top -b -n1 >> $ tmpfile
    / usr / bin / top -b -n1 >> $ topfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Rodyti dabartinius ryšius:
    echo "netstat dabar rodo:" >> $ tmpfile
    / bin / netstat -p >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Patikrinkite vietos diske
    echo "disk space:" >> $ tmpfile
    / bin / df -k >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Siųsti rezultatus į žurnalo failą:
    / bin / cat $ tmpfile >> $ logfile

    # Ir el. Laiškų sysadmin rezultatai:
    / usr / bin / mutt -s "$ mašina turi didelį apkrovos lygį! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile

    # Ir tada pašalinkite temp failą:
    rm $ tmpfile
    rm $ topfile
    fi

    #
    išeiti 0