Domovská » jak » Diagnostikujte problémy s načítáním serveru Linux pomocí jednoduchého skriptu

    Diagnostikujte problémy s načítáním serveru Linux pomocí jednoduchého skriptu

    Pokud jste administrátor po nějakou dobu, určitě jste zjistili situace, kdy server narůstá v používání CPU nebo při využití paměti a / nebo zatížení. Spuštění "vrcholu" vám vždy neposkytuje odpověď. Takže, jak zjistíte ty tajuplné procesy, které žvýkají vaše systémové prostředky, aby je mohly zabít?

    Následující skript může pomoci. Byl napsán pro webový server, takže některé jeho části konkrétně hledají procesy httpd a některé části, které se zabývají MySQL. V závislosti na nasazení serveru stačí komentovat / smazat tyto oddíly a přidat další. Měla by být použita jako výchozí bod.

    Předpoklady pro tuto verzi skriptu jsou některé freeware vydané pod GNU General Public License s názvem mytop (k dispozici na http://jeremy.zawodny.com/mysql/mytop/), což je fantastický nástroj pro kontrolu fungování MySQL. Stárne, ale stále funguje skvěle pro naše účely.
    Navíc používám mutt jako mailer - můžete zkusit změnit skript jednoduše pomocí linuxu postaveného v utilitě 'mail'. Spouštím je přes cron každou hodinu; upravte podle svého uvážení. Oh - a tento skript musí běžet jako root, protože čte z některých chráněných oblastí serveru.

    Takže začneme, budeme?

    Nejprve nastavte proměnné skriptu:

    #! / bin / bash
    #
    # Skript pro kontrolu zatížení systému průměrné úrovně se snaží určit
    # jaké procesy ji přebírají příliš vysoko ...
    #
    # 07Jul2010 tjones
    #
    # nastavení prostředí
    dt = "datum +% d% b% Y-% X"
    # Zjistěte, změňte následující adresáře tam, kde jsou skutečně uloženy soubory protokolu
    tmpfile = "/ tmp / checkSystemLoad.tmp"
    logfile = "/ tmp / checkSystemLoad.log"
    msgLog = "/ var / log / zprávy"
    mysqlLog = "/ var / log / mysqld.log"
    # první poštovní schránka je standardní e-mail pro zprávy. Druhá je pro mobilní telefon (s rozbalenou zprávou)
    mailstop = "[email protected]"
    mailstop1 = "[email protected]"
    machine = "hostname"
    # Následující tři jsou pro mytop použití - použijte db uživatele, který má slušné práva
    dbusr = "uživatelské jméno"
    dbpw = "heslo"
    db = "yourdatabasename"
    # Níže je úroveň zatížení, kterou chcete zkontrolovat - 10 je skutečně vysoká, takže jej můžete snížit.
    levelToCheck = 10

    Poté zkontrolujte úroveň zatížení a zkontrolujte, zda má skript pokračovat:

    # Nastavte proměnné ze systému:
    loadLevel = "cat / proc / loadavg | awk" tisk $ 1 "
    loadLevel = $ (printf "% 0.f" $ loadLevel)

    # Pokud je úroveň načítání větší, než chcete, spusťte proces skriptu. V opačném případě ukončíte 0

    pokud [$ loadLevel -gt $ levelToCheck]; pak
    echo ""> $ tmpfile
    echo "***************************************" >> $ tmpfile
    echo "Datum: $ dt" >> $ tmpfile
    echo "Zkontrolovat zatížení a procesy systému" >> $ tmpfile
    echo "***************************************" >> $ tmpfile

    A pokračujte v kontrolách a zapisujte výsledky do dočasného souboru. Přidejte nebo odstraňte položky tam, kde je to vhodné pro vaši situaci:

    # Získejte více proměnných ze systému:
    httpdProcesses = "ps -def | grep | httpd | grep -v grep | wc -l"

    # Zobrazit aktuální úroveň zatížení:
    echo "Úroveň zatížení je: $ loadLevel" >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile

    # Zobrazit počet probíhajících procesů httpd (bez dětí):
    echo "Počet procesů httpd nyní: $ httpdProcesses" >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Zobrazit seznam procesů:
    echo "Procesy běží:" >> $ tmpfile
    ps f -ef >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Zobrazit aktuální informace o MySQL:
    echo "Výsledky z mytop:" >> $ tmpfile
    / usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    Všimněte si, že pomocí příkazu top zapisujeme dva soubory temp. Jeden je pro mnohem menší zprávu na mobilní telefon. Pokud si nepřejete naléhavost upozornění na mobilní telefon ve tři ráno, můžete si to vzít (a vyřadit druhý poštovní rutinu později ve scénáři).


    # Zobrazit aktuální top:
    echo "top nyní ukazuje:" >> $ tmpfile
    echo "nahoře ukazuje:" >> $ topfile
    / usr / bin / nahoru -b -n1 >> $ tmpfile
    / usr / bin / top -b -n1 >> $ topfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    Další kontroly:


    # Zobrazit aktuální připojení:
    echo "netstat nyní ukazuje:" >> $ tmpfile
    / bin / netstat -p >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Zkontrolujte místo na disku
    echo "místo na disku:" >> $ tmpfile
    / bin / df -k >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    Poté napište dočasný soubor do trvalějšího souboru protokolu a výsledky zašlete e-mailem příslušným stranám. Druhá zásilka je výsledkem srovnatelných výsledků, které se skládají jednoduše z "vrcholu":

    # Odeslat výsledky do souboru protokolu:
    / bin / mačka $ tmpfile >> $ logfile

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

    A pak nějaké úklid a výstup:

    # A potom odeberte soubor temp:
    rm $ tmpfile
    rm $ topfile
    fi

    #
    výstup 0

    Doufejme, že to někomu pomůže. Plně sestavený skript je:

    #! / bin / bash
    #
    # Script pro kontrolu úrovně zatížení systému, aby se zjistila, jaké procesy jsou
    # to přebírá příliš vysoko ...
    #
    # nastavení prostředí
    dt = "datum +% d% b% Y-% X"
    # Zjistěte, změňte následující adresáře tam, kde jsou skutečně uloženy soubory protokolu
    tmpfile = "/ tmp / checkSystemLoad.tmp"
    logfile = "/ tmp / checkSystemLoad.log"
    msgLog = "/ var / log / zprávy"
    mysqlLog = "/ var / log / mysqld.log"
    # první poštovní schránka je standardní e-mail pro zprávy. Druhá je pro mobilní telefon (s rozbalenou zprávou)
    mailstop = "[email protected]"
    mailstop1 = "[email protected]"
    machine = "hostname"
    # Následující tři jsou pro mytop použití - použijte db uživatele, který má slušné práva
    dbusr = "uživatelské jméno"
    dbpw = "heslo"
    db = "yourdatabasename"
    # Níže je úroveň zatížení, kterou chcete zkontrolovat - 10 je skutečně vysoká, takže jej můžete snížit.
    levelToCheck = 10
    # Nastavte proměnné ze systému:
    loadLevel = "cat / proc / loadavg | awk" tisk $ 1 "
    loadLevel = $ (printf "% 0.f" $ loadLevel)

    # Pokud je úroveň načítání větší, než chcete, spusťte proces skriptu. V opačném případě ukončíte 0

    pokud [$ loadLevel -gt $ levelToCheck]; pak
    echo ""> $ tmpfile
    echo "***************************************" >> $ tmpfile
    echo "Datum: $ dt" >> $ tmpfile
    echo "Zkontrolovat zatížení a procesy systému" >> $ tmpfile
    echo "***************************************" >> $ tmpfile

    # Získejte více proměnných ze systému:
    httpdProcesses = "ps -def | grep | httpd | grep -v grep | wc -l"

    # Zobrazit aktuální úroveň zatížení:
    echo "Úroveň zatížení je: $ loadLevel" >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile

    # Zobrazit počet probíhajících procesů httpd (bez dětí):
    echo "Počet procesů httpd nyní: $ httpdProcesses" >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Zobrazit seznam procesů:
    echo "Procesy běží:" >> $ tmpfile
    ps f -ef >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Zobrazit aktuální informace o MySQL:
    echo "Výsledky z mytop:" >> $ tmpfile
    / usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Zobrazit aktuální top:
    echo "top nyní ukazuje:" >> $ tmpfile
    echo "nahoře ukazuje:" >> $ topfile
    / usr / bin / nahoru -b -n1 >> $ tmpfile
    / usr / bin / top -b -n1 >> $ topfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Zobrazit aktuální připojení:
    echo "netstat nyní ukazuje:" >> $ tmpfile
    / bin / netstat -p >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Zkontrolujte místo na disku
    echo "místo na disku:" >> $ tmpfile
    / bin / df -k >> $ tmpfile
    echo "************************************************* * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Odeslat výsledky do souboru protokolu:
    / bin / mačka $ tmpfile >> $ logfile

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

    # A potom odeberte soubor temp:
    rm $ tmpfile
    rm $ topfile
    fi

    #
    výstup 0