Úvodná » ako » Diagnóza problémov s načítavaním servera Linux s jednoduchým skriptom

    Diagnóza problémov s načítavaním servera Linux s jednoduchým skriptom

    Ak ste administrátorom po určitú dobu, určite ste zistili situácie, keď server narastá v používaní CPU alebo využití pamäte a / alebo úrovniach načítania. Spustenie "top" vám nie vždy poskytne odpoveď. Takže, ako nájdeš tie záludné procesy, ktoré žutia systémové zdroje, aby si ich mohol zabiť??

    Nasledujúci skript by mohol pomôcť. Bol napísaný pre webový server, takže niektoré jeho časti konkrétne hľadajú procesy httpd a niektoré časti, ktoré sa zaoberajú MySQL. V závislosti od nasadenia servera stačí komentovať / odstrániť tie časti a pridať ďalšie. Mal by sa použiť ako východiskový bod.

    Predpoklady pre túto verziu skriptu sú niektoré freeware vydané pod GNU General Public License s názvom mytop (k dispozícii na adrese http://jeremy.zawodny.com/mysql/mytop/), čo je skvelý nástroj na kontrolu fungovania MySQL. Stárne, ale stále funguje skvelo pre naše účely tu.
    Navyše používam mutt ako poštový priečinok - možno budete chcieť zmeniť skript jednoducho pomocou linuxu postaveného v utilitách 'mail'. Spúšťam to cez cron každú hodinu; upravte podľa vlastného uváženia. Oh - a tento skript musí bežať ako root, pretože číta z niektorých chránených oblastí servera.

    Takže začnime, budeme?

    Najprv nastavte premenné skriptu:

    #! / Bin / bash
    #
    # Script skontrolovať priemernú úroveň zaťaženia systému, aby ste sa pokúsili zistiť
    # aké procesy to robia príliš vysoko ...
    #
    # 07Jul2010 tjones
    #
    # nastavené prostredie
    dt = "dátum +% d% b% Y-% X"
    # Zrejme, zmeňte nasledujúce adresáre na miesto, kde sa skutočne uchovávajú vaše súbory denníka
    tmpfile = "/ TMP / checkSystemLoad.tmp"
    logfile = "/ TMP / checkSystemLoad.log"
    msgLog = "/ var / log / messages"
    mysqlLog = "/ var / log / mysqld.log"
    # prvý mailstop je štandardný e-mail pre správy. Druhá je pre mobilný telefón (so zdieľanou správou)
    mailstop = "[email protected]"
    mailstop1 = "[email protected]"
    Stroj = "hostiteľa"
    # Nasledujúce tri sú pre mytop použitie - používajte db užívateľa, ktorý má slušné práva
    dbusr = "meno"
    dBpW = "password"
    db = "yourdatabasename"
    # Nasledujúce je úroveň zaťaženia na kontrolu - 10 je naozaj vysoká, takže ho možno budete chcieť znížiť.
    levelToCheck = 10

    Ďalej skontrolujte úroveň zaťaženia a zistite, či skript by mal pokračovať:

    # Nastaviť premenné zo systému:
    loadLevel = "cat / proc / loadavg | awk" tlač $ 1 "
    loadLevel = $ (printf "% 0.f" $ loadLevel)

    # ak je úroveň zaťaženia vyššia, než chcete, spustite proces skriptu. V opačnom prípade opustite 0

    ak [$ loadLevel -gt $ levelToCheck]; potom
    echo ""> $ tmpfile
    echo "****************************************" >> $ tmpfile
    echo "Dátum: $ dt" >> $ tmpfile
    echo "Kontrola zaťaženia a procesov systému" >> $ tmpfile
    echo "****************************************" >> $ tmpfile

    A pokračujte v kontrolách a napíšte výsledky do dočasného súboru. Pridajte alebo odstráňte položky tam, kde je to vhodné pre vašu situáciu:

    # Získajte ďalšie premenné zo systému:
    httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"

    # Zobraziť aktuálnu úroveň zaťaženia:
    echo "Úroveň zaťaženia je: $ loadLevel" >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile

    # Zobraziť počet bežiacich procesov httpd (bez detí):
    echo "Počet procesov httpd teraz: $ httpdProcesses" >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Zobraziť zoznam procesov:
    echo "Prebiehajúce procesy:" >> $ tmpfile
    ps f -ef >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Zobraziť aktuálne informácie o MySQL:
    echo "Výsledky z mytop:" >> $ tmpfile
    / usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    Všimnite si príkaz top, píšeme dva dočasné súbory. Jedna je pre oveľa menšie správy na mobilný telefón. Ak nechcete naliehavosť upozornení na mobilné telefóny o tri ráno, môžete to vyriešiť (a vytiahnuť druhú poštovú rutinu neskôr v skripte).


    # Zobraziť aktuálnu top:
    echo "top teraz ukazuje:" >> $ tmpfile
    echo "top teraz ukazuje:" >> $ topfile
    / usr / bin / top -b -n1 >> $ tmpfile
    / usr / bin / top -b -n1 >> $ topfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    Ďalšie kontroly:


    # Zobraziť aktuálne pripojenia:
    echo "netstat teraz ukazuje:" >> $ tmpfile
    / bin / netstat -p >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Skontrolujte miesto na disku
    echo "miesto na disku:" >> $ tmpfile
    / bin / df -k >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    Potom napíšte dočasný obsah súboru do stálejšieho súboru denníka a výsledky odošlite príslušným stranám. Druhá zásielka je výsledkom porovnateľných výsledkov, ktoré pozostávajú jednoducho z úrovne "zhora":

    # Odoslať výsledky do súboru denníka:
    / bin / mačka $ tmpfile >> $ logfile

    # A výsledky e-mailu sysadmin:
    / usr / bin / mutt -s "$ stroj má vysokú úroveň zaťaženia! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile

    A potom nejaká domácnosť a výstup:

    # A potom odstráňte dočasný súbor:
    rm $ tmpfile
    rm $ topfile
    fi

    #
    exit 0

    Dúfajme, že to pomôže niekomu vonku. Plne zostavený skript je:

    #! / Bin / bash
    #
    # Skript, aby ste skontrolovali priemernú úroveň zaťaženia systému, aby ste sa pokúsili určiť, aké procesy sú
    # vzal to príliš vysoko ...
    #
    # nastavené prostredie
    dt = "dátum +% d% b% Y-% X"
    # Zrejme, zmeňte nasledujúce adresáre na miesto, kde sa skutočne uchovávajú vaše súbory denníka
    tmpfile = "/ TMP / checkSystemLoad.tmp"
    logfile = "/ TMP / checkSystemLoad.log"
    msgLog = "/ var / log / messages"
    mysqlLog = "/ var / log / mysqld.log"
    # prvý mailstop je štandardný e-mail pre správy. Druhá je pre mobilný telefón (so zdieľanou správou)
    mailstop = "[email protected]"
    mailstop1 = "[email protected]"
    Stroj = "hostiteľa"
    # Nasledujúce tri sú pre mytop použitie - používajte db užívateľa, ktorý má slušné práva
    dbusr = "meno"
    dBpW = "password"
    db = "yourdatabasename"
    # Nasledujúce je úroveň zaťaženia na kontrolu - 10 je naozaj vysoká, takže ho možno budete chcieť znížiť.
    levelToCheck = 10
    # Nastaviť premenné zo systému:
    loadLevel = "cat / proc / loadavg | awk" tlač $ 1 "
    loadLevel = $ (printf "% 0.f" $ loadLevel)

    # ak je úroveň zaťaženia vyššia, než chcete, spustite proces skriptu. V opačnom prípade opustite 0

    ak [$ loadLevel -gt $ levelToCheck]; potom
    echo ""> $ tmpfile
    echo "****************************************" >> $ tmpfile
    echo "Dátum: $ dt" >> $ tmpfile
    echo "Kontrola zaťaženia a procesov systému" >> $ tmpfile
    echo "****************************************" >> $ tmpfile

    # Získajte ďalšie premenné zo systému:
    httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"

    # Zobraziť aktuálnu úroveň zaťaženia:
    echo "Úroveň zaťaženia je: $ loadLevel" >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile

    # Zobraziť počet bežiacich procesov httpd (bez detí):
    echo "Počet procesov httpd teraz: $ httpdProcesses" >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Zobraziť zoznam procesov:
    echo "Prebiehajúce procesy:" >> $ tmpfile
    ps f -ef >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Zobraziť aktuálne informácie o MySQL:
    echo "Výsledky z mytop:" >> $ tmpfile
    / usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Zobraziť aktuálnu top:
    echo "top teraz ukazuje:" >> $ tmpfile
    echo "top teraz ukazuje:" >> $ topfile
    / usr / bin / top -b -n1 >> $ tmpfile
    / usr / bin / top -b -n1 >> $ topfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Zobraziť aktuálne pripojenia:
    echo "netstat teraz ukazuje:" >> $ tmpfile
    / bin / netstat -p >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Skontrolujte miesto na disku
    echo "miesto na disku:" >> $ tmpfile
    / bin / df -k >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Odoslať výsledky do súboru denníka:
    / bin / mačka $ tmpfile >> $ logfile

    # A výsledky e-mailu sysadmin:
    / usr / bin / mutt -s "$ stroj má vysokú úroveň zaťaženia! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile

    # A potom odstráňte dočasný súbor:
    rm $ tmpfile
    rm $ topfile
    fi

    #
    exit 0