Domača » kako » Diagnosticiranje težav s strežnikom Linux s preprostim skriptom

    Diagnosticiranje težav s strežnikom Linux s preprostim skriptom

    Če ste že dlje časa upravljali, ste zagotovo odkrili situacije, ko strežnik poveča porabo CPU-ja ali ravni izkoriščenosti pomnilnika in / ali ravni obremenitve. Izvajanje 'top' vam ne bo vedno dalo odgovora. Torej, kako najti tiste skrite procese, ki žvečijo vaše sistemske vire, da bi jih lahko ubili?

    Naslednji skript bi lahko pomagal. Napisano je bilo za spletni strežnik, tako da ima nekatere njegove dele, ki so posebej iskali procese httpd in nekatere dele, ki se ukvarjajo z MySQL. Odvisno od uvajanja strežnika preprosto komentirajte / izbrišite te dele in dodajte druge. Uporabiti ga je treba kot izhodišče.

    Predpogoji za to različico skripta so nekatere brezplačne programske opreme, izdane pod GNU General Public License, imenovano mytop (na voljo na http://jeremy.zawodny.com/mysql/mytop/), kar je odlično orodje za preverjanje, kako MySQL deluje. Postaja stara, vendar še vedno odlično deluje za naše namene.
    Poleg tega uporabljam mutt kot poštni predal - morda boste želeli spremeniti skript, da preprosto uporabite linux vgrajen program za pošto. Vsako uro ga vodim preko cron-a; prilagodite, kot se vam zdi primerno. Oh - in ta skript mora biti zagnan kot root, ker se bere iz nekaterih zaščitenih področij strežnika.

    Torej, začnimo?

    Najprej nastavite skriptne spremenljivke:

    #! / bin / bash
    #
    # Skripta za preverjanje povprečnih ravni obremenitev sistema, da poskusite ugotoviti
    # kateri procesi so preveč visoki ...
    #
    # 07Jul2010 tjones
    #
    # nastavite okolje
    dt = "datum +% d% b% Y-% X"
    # Očitno spremenite naslednje imenike na mesta, kjer se dejansko hranijo vaše datoteke dnevnika
    tmpfile = "/ tmp / checkSystemLoad.tmp"
    logfile = "/ tmp / checkSystemLoad.log"
    msgLog = "/ var / log / messages"
    mysqlLog = "/ var / log / mysqld.log"
    # je prvi poštni naslov standardna e-pošta za poročila. Drugi je za mobilni telefon (z zmanjšanim poročilom)
    mailstop = "[email protected]"
    mailstop1 = "[email protected]"
    machine = "ime gostitelja"
    # Naslednji trije so za mytop uporabo - uporabite db uporabnika, ki ima dostojne pravice
    dbusr = "uporabniško ime"
    dbpw = "geslo"
    db = "vašdatabasename"
    # Naslednja je stopnja obremenitve za preverjanje - 10 je res visoka, zato jo boste morda želeli znižati.
    levelToCheck = 10

    Nato preverite raven nalaganja, da vidite, ali naj se skript nadaljuje:

    # Nastavi spremenljivke iz sistema:
    loadLevel = "cat / proc / loadavg | awk" print $ 1 "
    loadLevel = $ (printf "% 0.f" $ loadLevel)

    # če je stopnja obremenitve večja, kot želite, začnite postopek skripta. V nasprotnem primeru zapustite 0

    if [$ loadLevel -gt $ levelToCheck]; potem
    echo ""> $ tmpfile
    echo "**************************************" >> $ tmpfile
    echo "Datum: $ dt" >> $ tmpfile
    echo "Preveri obremenitev sistema in procesi" >> $ tmpfile
    echo "**************************************" >> $ tmpfile

    Nadaljujte s preverjanji in rezultate zapišite v začasno datoteko. Dodajte ali izbrišite elemente od tukaj, kjer je to primerno za vašo situacijo:

    # Pridobite več spremenljivk iz sistema:
    httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"

    # Prikaži trenutno stopnjo obremenitve:
    echo "Nivo obremenitve je: $ loadLevel" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile

    # Prikaži število potekajočih postopkov httpd (brez otrok):
    echo "Število procesov httpd: $ httpdProcesses" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo >> $ tmpfile

    # Prikaži seznam postopkov:
    echo "Postopki se zdaj izvajajo:" >> $ tmpfile
    ps f -ef >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo >> $ tmpfile

    # Prikaži trenutne podatke o MySQL:
    echo "Rezultati iz mytop:" >> $ tmpfile
    / usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo >> $ tmpfile

    Obvestilo z zgornjim ukazom pišemo na dve datoteki temp. Ena je za veliko manjše sporočilo na mobilni telefon. Če ne želite, da se opozorila mobilnega telefona nujno zahtevajo ob treh zjutraj, lahko to vzamete ven (in pozneje v skriptu odstranite drugi poštni postopek).


    # Prikaži trenutni vrh:
    echo "top zdaj prikazuje:" >> $ tmpfile
    echo "top now prikazuje:" >> $ topfile
    / usr / bin / top -b -n1 >> $ tmpfile
    / usr / bin / top -b -n1 >> $ topfile
    echo "************************************************ * ">> $ tmpfile
    echo >> $ tmpfile

    Več pregledov:


    # Prikaži trenutne povezave:
    echo "netstat zdaj prikazuje:" >> $ tmpfile
    / bin / netstat -p >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo >> $ tmpfile

    # Preverite prostor na disku
    echo "prostor na disku:" >> $ tmpfile
    / bin / df -k >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo >> $ tmpfile

    Nato vsebino začasne datoteke zapišite v trajnejšo datoteko dnevnika in rezultate pošljete ustreznim strankam. Druga pošta je zmanjšan rezultat, ki je sestavljen zgolj iz standarda iz "top":

    # Pošlji rezultate v datoteko dnevnika:
    / bin / cat $ tmpfile >> $ logfile

    # In e-poštni rezultati za sysadmin:
    / usr / bin / mutt -s "$ machine ima visoko stopnjo obremenitve! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile

    In potem nekaj gospodinjstva in izhoda:

    # In nato odstranite začasno datoteko:
    rm $ tmpfile
    rm $ topfile
    fi

    #
    izhod 0

    Upajmo, da to pomaga nekomu tam zunaj. Popolnoma sestavljen skript je:

    #! / bin / bash
    #
    # Skript za preverjanje povprečnih ravni obremenitev sistema, da bi poskušali ugotoviti, kateri procesi so
    # je preveč visoka ...
    #
    # nastavite okolje
    dt = "datum +% d% b% Y-% X"
    # Očitno spremenite naslednje imenike na mesta, kjer se dejansko hranijo vaše datoteke dnevnika
    tmpfile = "/ tmp / checkSystemLoad.tmp"
    logfile = "/ tmp / checkSystemLoad.log"
    msgLog = "/ var / log / messages"
    mysqlLog = "/ var / log / mysqld.log"
    # je prvi poštni naslov standardna e-pošta za poročila. Drugi je za mobilni telefon (z zmanjšanim poročilom)
    mailstop = "[email protected]"
    mailstop1 = "[email protected]"
    machine = "ime gostitelja"
    # Naslednji trije so za mytop uporabo - uporabite db uporabnika, ki ima dostojne pravice
    dbusr = "uporabniško ime"
    dbpw = "geslo"
    db = "vašdatabasename"
    # Naslednja je stopnja obremenitve za preverjanje - 10 je res visoka, zato jo boste morda želeli znižati.
    levelToCheck = 10
    # Nastavi spremenljivke iz sistema:
    loadLevel = "cat / proc / loadavg | awk" print $ 1 "
    loadLevel = $ (printf "% 0.f" $ loadLevel)

    # če je stopnja obremenitve večja, kot želite, začnite postopek skripta. V nasprotnem primeru zapustite 0

    if [$ loadLevel -gt $ levelToCheck]; potem
    echo ""> $ tmpfile
    echo "**************************************" >> $ tmpfile
    echo "Datum: $ dt" >> $ tmpfile
    echo "Preveri obremenitev sistema in procesi" >> $ tmpfile
    echo "**************************************" >> $ tmpfile

    # Pridobite več spremenljivk iz sistema:
    httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"

    # Prikaži trenutno stopnjo obremenitve:
    echo "Nivo obremenitve je: $ loadLevel" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile

    # Prikaži število potekajočih postopkov httpd (brez otrok):
    echo "Število procesov httpd: $ httpdProcesses" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo >> $ tmpfile

    # Prikaži seznam postopkov:
    echo "Postopki se zdaj izvajajo:" >> $ tmpfile
    ps f -ef >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo >> $ tmpfile

    # Prikaži trenutne podatke o MySQL:
    echo "Rezultati iz mytop:" >> $ tmpfile
    / usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo >> $ tmpfile

    # Prikaži trenutni vrh:
    echo "top zdaj prikazuje:" >> $ tmpfile
    echo "top now prikazuje:" >> $ topfile
    / usr / bin / top -b -n1 >> $ tmpfile
    / usr / bin / top -b -n1 >> $ topfile
    echo "************************************************ * ">> $ tmpfile
    echo >> $ tmpfile

    # Prikaži trenutne povezave:
    echo "netstat zdaj prikazuje:" >> $ tmpfile
    / bin / netstat -p >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo >> $ tmpfile

    # Preverite prostor na disku
    echo "prostor na disku:" >> $ tmpfile
    / bin / df -k >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo >> $ tmpfile

    # Pošlji rezultate v datoteko dnevnika:
    / bin / cat $ tmpfile >> $ logfile

    # In e-poštni rezultati za sysadmin:
    / usr / bin / mutt -s "$ machine ima visoko stopnjo obremenitve! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile

    # In nato odstranite začasno datoteko:
    rm $ tmpfile
    rm $ topfile
    fi

    #
    izhod 0