Kotisivu » miten » Diagnoosi Linux-palvelimen latausongelmat yksinkertaisen komentosarjan avulla

    Diagnoosi Linux-palvelimen latausongelmat yksinkertaisen komentosarjan avulla

    Jos olet ollut jonkin aikaa hallinnoija, olet varmasti löytänyt tilanteita, joissa palvelimen piikki on CPU: n käytössä tai muistin hyödyntämisessä ja / tai kuormatasoissa. "Top" -toiminnon käyttäminen ei aina anna sinulle vastausta. Joten miten löydät ne lyömättömät prosessit, jotka pureskelevat järjestelmän resursseja, jotta voit tappaa 'em'?

    Seuraava komentosarja voi auttaa. Se on kirjoitettu web-palvelimelle, joten siinä on joitakin osia, jotka etsivät erityisesti httpd-prosesseja ja joitakin osia, jotka käsittelevät MySQL: ää. Riippuen palvelimen käyttöönotosta yksinkertaisesti kommentoi / poista nämä osat ja lisää muita. Sitä olisi käytettävä lähtökohtana.

    Skriptin tämän version edellytykset ovat joitakin ilmaistietoja, jotka julkaistaan ​​GNU: n yleisen lisenssin (mytop) kautta (saatavilla osoitteessa http://jeremy.zawodny.com/mysql/mytop/). Se on ikääntymässä, mutta toimii edelleen hyvin meidän tarkoituksissamme.
    Lisäksi käytän muttia mailerina - saatat haluta vaihtaa komentosarjan yksinkertaisesti käyttämään "mail" -apuohjelmaa. Juoksen sen cronin kautta joka tunti; säädä sopivaksi. Oh - ja tämä skripti on suoritettava root-muodossa, koska se luetaan tietyiltä palvelimen suojattavilta alueilta.

    Joten aloitetaan, meidän on?

    Määritä ensin komentosarjan muuttujat:

    #! / Bin / bash
    #
    # Script tarkistaa järjestelmän kuormituksen keskiarvot yrittää määrittää
    # mitä prosesseja otetaan liian suuriksi…
    #
    # 07Jul2010 tjones
    #
    # asetettu ympäristö
    dt = "päivämäärä +% d% b% Y-% X"
    # Vaihda seuraavat hakemistot tietysti lokitiedostojen paikkaan
    tmpfile = "/ tmp / checkSystemLoad.tmp"
    lokitiedosto = "/ tmp / checkSystemLoad.log"
    msgLog = "/ var / log / messages"
    mysqlLog = "/ var / log / mysqld.log"
    # ensimmäinen mailstop on raporttien tavallinen sähköposti. Toinen on matkapuhelin (jaettu raportti)
    mailstop = "[email protected]"
    mailstop1 = "[email protected]"
    kone = "isäntänimi"
    # Seuraavat kolme ovat mytop-käyttöä varten - käytä db-käyttäjää, jolla on kunnolliset oikeudet
    dbusr = "käyttäjänimi"
    dbpw = "password"
    db = "yourdatabasename"
    # Seuraavassa on kuormitustaso, johon tarkistaa - 10 on todella korkea, joten saatat haluta alentaa sitä.
    levelToCheck = 10

    Tarkista seuraavaksi lataustaso ja tarkista, pitäisikö skripti jatkaa:

    # Aseta muuttujat muuttujasta:
    loadLevel = "cat / proc / loadavg | awk" print $ 1 "
    loadLevel = $ (printf "% 0.f" $ loadLevel)

    # Jos lataustaso on suurempi kuin haluat, käynnistä komentosarja. Muussa tapauksessa poistu 0

    jos [$ loadLevel -gt $ levelToCheck]; sitten
    echo ""> $ tmpfile
    echo "**************************************" >> $ tmpfile
    echo "Päiväys: $ dt" >> $ tmpfile
    echo "Tarkista järjestelmän kuormitus ja prosessit" >> $ tmpfile
    echo "**************************************" >> $ tmpfile

    Ja jatka tarkistusten avulla kirjoittamalla tulokset tilapäiseen tiedostoon. Lisää tai poista kohteita täältä, jos se on tilanteessa:

    # Hanki lisää muuttujia järjestelmästä:
    httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"

    # Näytä nykyinen kuormitustaso:
    echo "Kuormataso on: $ loadLevel" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile

    # Näytä nyt käynnissä olevien httpd-prosessien lukumäärä (ei sisällä lapsia):
    echo "httpd-prosessien lukumäärä nyt: $ httpdProcesses" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Näytä prosessiluettelo:
    echo "Nyt käynnissä olevat prosessit:" >> $ tmpfile
    ps f -ef >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Näytä nykyiset MySQL-tiedot:
    echo "Tulokset mytopista:" >> $ tmpfile
    / usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    Huomaa, että ylimmän komennon avulla kirjoitamme kahteen temp-tiedostoon. Yksi on paljon pienempi viesti matkapuhelimelle. Jos et halua, että matkapuhelin hälyttää kiireellisesti kolmessa aamulla, voit ottaa tämän pois (ja ota toinen postitusrutiisi myöhemmin skriptiin).


    # Näytä nykyinen alkuun:
    echo "top nyt näyttää:" >> $ tmpfile
    echo "top nyt näyttää:" >> $ topfile
    / usr / bin / top -b -n1 >> $ tmpfile
    / usr / bin / top -b -n1 >> $ topfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    Lisää tarkistuksia:


    # Näytä nykyiset yhteydet:
    echo "netstat näyttää nyt:" >> $ tmpfile
    / bin / netstat -p >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Tarkista levytila
    echo "levytila:" >> $ tmpfile
    / bin / df -k >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    Kirjoita sitten väliaikaisen tiedoston sisältö pysyvämpään lokitiedostoon ja lähetä tulokset vastaaville osapuolille. Toinen postitus on paraatiotulokset, jotka muodostuvat yksinkertaisesti standardin ulkopuolelle:

    # Lähetä tulokset lokitiedostoon:
    / bin / cat $ tmpfile >> $ lokitiedosto

    # Ja sähköpostitulokset sysadminiin:
    / usr / bin / mutt -s "$ koneella on suuri kuormataso! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile

    Ja sitten jotkut siivous ja poistuminen:

    # Ja poista sitten temp-tiedosto:
    rm $ tmpfile
    rm $ topfile
    fi

    #
    Lopeta 0

    Toivottavasti tämä auttaa jotakuta siellä. Täysin koottu komentosarja on:

    #! / Bin / bash
    #
    # Script tarkistaa järjestelmän kuormituksen keskimääräiset tasot yrittää selvittää, mitkä prosessit ovat
    # ottaa sen liian korkealle…
    #
    # asetettu ympäristö
    dt = "päivämäärä +% d% b% Y-% X"
    # Vaihda seuraavat hakemistot tietysti lokitiedostojen paikkaan
    tmpfile = "/ tmp / checkSystemLoad.tmp"
    lokitiedosto = "/ tmp / checkSystemLoad.log"
    msgLog = "/ var / log / messages"
    mysqlLog = "/ var / log / mysqld.log"
    # ensimmäinen mailstop on raporttien tavallinen sähköposti. Toinen on matkapuhelin (jaettu raportti)
    mailstop = "[email protected]"
    mailstop1 = "[email protected]"
    kone = "isäntänimi"
    # Seuraavat kolme ovat mytop-käyttöä varten - käytä db-käyttäjää, jolla on kunnolliset oikeudet
    dbusr = "käyttäjänimi"
    dbpw = "password"
    db = "yourdatabasename"
    # Seuraavassa on kuormitustaso, johon tarkistaa - 10 on todella korkea, joten saatat haluta alentaa sitä.
    levelToCheck = 10
    # Aseta muuttujat muuttujasta:
    loadLevel = "cat / proc / loadavg | awk" print $ 1 "
    loadLevel = $ (printf "% 0.f" $ loadLevel)

    # Jos lataustaso on suurempi kuin haluat, käynnistä komentosarja. Muussa tapauksessa poistu 0

    jos [$ loadLevel -gt $ levelToCheck]; sitten
    echo ""> $ tmpfile
    echo "**************************************" >> $ tmpfile
    echo "Päiväys: $ dt" >> $ tmpfile
    echo "Tarkista järjestelmän kuormitus ja prosessit" >> $ tmpfile
    echo "**************************************" >> $ tmpfile

    # Hanki lisää muuttujia järjestelmästä:
    httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"

    # Näytä nykyinen kuormitustaso:
    echo "Kuormataso on: $ loadLevel" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile

    # Näytä nyt käynnissä olevien httpd-prosessien lukumäärä (ei sisällä lapsia):
    echo "httpd-prosessien lukumäärä nyt: $ httpdProcesses" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Näytä prosessiluettelo:
    echo "Nyt käynnissä olevat prosessit:" >> $ tmpfile
    ps f -ef >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Näytä nykyiset MySQL-tiedot:
    echo "Tulokset mytopista:" >> $ tmpfile
    / usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Näytä nykyinen alkuun:
    echo "top nyt näyttää:" >> $ tmpfile
    echo "top nyt näyttää:" >> $ topfile
    / usr / bin / top -b -n1 >> $ tmpfile
    / usr / bin / top -b -n1 >> $ topfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Näytä nykyiset yhteydet:
    echo "netstat näyttää nyt:" >> $ tmpfile
    / bin / netstat -p >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Tarkista levytila
    echo "levytila:" >> $ tmpfile
    / bin / df -k >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Lähetä tulokset lokitiedostoon:
    / bin / cat $ tmpfile >> $ lokitiedosto

    # Ja sähköpostitulokset sysadminiin:
    / usr / bin / mutt -s "$ koneella on suuri kuormataso! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile

    # Ja poista sitten temp-tiedosto:
    rm $ tmpfile
    rm $ topfile
    fi

    #
    Lopeta 0