Homepage » hogyan kell » Diagnosztizálja a Linux kiszolgáló betöltési problémáit egy egyszerű parancsfájl segítségével

    Diagnosztizálja a Linux kiszolgáló betöltési problémáit egy egyszerű parancsfájl segítségével

    Ha bármilyen időtartamig adminisztrátor voltál, biztosan felfedezted azokat a helyzeteket, ahol a kiszolgáló a CPU-használatban vagy a memóriahasználatban és / vagy a terhelési szintekben jelentkezik. A 'top' futása nem mindig ad választ a válaszra. Szóval hogyan találja meg azokat a csúszós folyamatokat, amelyek a rendszer erőforrásait rágják, hogy megölhessék?

    A következő parancsfájl segíthet. Egy webkiszolgálóra írták, így néhány olyan része van, amelyek kifejezetten httpd folyamatokat keresnek, és egyes részeket, amelyek a MySQL-rel foglalkoznak. A kiszolgáló telepítésétől függően egyszerűen csak kommentálja / törölje azokat, és adjon hozzá másokat. Ezt kiindulási pontként kell használni.

    A forgatókönyv ezen verziójának előfeltételei a GNU Általános Nyilvános Licenc alatt, a mytop néven megjelent freeware (elérhető a http://jeremy.zawodny.com/mysql/mytop/ címen), ami fantasztikus eszköz a MySQL teljesítményének ellenőrzésére. Idősödik, de mégis jól működik itt.
    Emellett a mutt-t használom mailerként is - lehet, hogy módosítani szeretnéd a forgatókönyvet, hogy egyszerűen használd a linux beépített levelező segédprogramot. Minden óra cronon keresztül futok; állítsa be, ahogyan tetszik. Oh - és ez a parancsfájl gyökérként fut, mivel a szerver egyes védett területeiről olvas.

    Tehát kezdjünk, mi?

    Először állítsa be a script változóit:

    #! / Bin / bash
    #
    # Script, hogy ellenőrizze a rendszerterhelés átlagos szintjét, hogy megpróbálja meghatározni
    # milyen folyamatokat vesz igénybe túl magasra…
    #
    # 07Jul2010 tjones
    #
    # beállított környezet
    dt = "dátum +% d% b% Y-% X"
    # Nyilvánvaló, hogy változtassa meg a következő könyvtárakat, ahol a naplófájlokat ténylegesen megőrzik
    tmpfile = "/ tmp / checkSystemLoad.tmp"
    logfile = "/ tmp / checkSystemLoad.log"
    msgLog = "/ var / log / messages"
    mysqlLog = "/ var / log / mysqld.log"
    # az első mailstop a jelentések standard e-mailje. A második a mobiltelefonra vonatkozik (leolvasott jelentéssel)
    Mailstop = "[email protected]"
    mailstop1 = "[email protected]"
    gép = "hostname"
    # A következő három a mytop használatára vonatkozik - használjon egy db felhasználó, akinek tisztességes jogai vannak
    dbusr = "felhasználónév"
    dbpw = "jelszó"
    db = "yourdatabasename"
    # Az alábbiakban a terhelés szintjét ellenőrizni kell - 10 nagyon magas, ezért érdemes csökkenteni.
    levelToCheck = 10

    Ezután ellenőrizze a terhelési szintet, hogy lássa, hogy folytatódjon-e a parancsfájl:

    # Változók beállítása a rendszerből:
    loadLevel = "cat / proc / loadavg | awk" print $ 1 "
    loadLevel = $ (printf "% 0.f" $ loadLevel)

    # Ha a terhelési szint nagyobb, mint amennyit akar, indítsa el a szkriptet. Ellenkező esetben kilép a 0-ból

    ha [$ loadLevel -gt $ levelToCheck]; azután
    echo ""> $ tmpfile
    echo "**************************************" >> $ tmpfile
    echo "Dátum: $ dt" >> $ tmpfile
    echo "Rendszerterhelés és folyamatok ellenőrzése" >> $ tmpfile
    echo "**************************************" >> $ tmpfile

    És folytassa az ellenőrzéseket, írja az eredményeket az ideiglenes fájlba. Elemek hozzáadása vagy törlése innen, ha alkalmazható a helyzetedre:

    # Kapjon több változót a rendszerből:
    httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"

    # Az aktuális terhelési szint megjelenítése:
    echo "Load Level: $ loadLevel" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile

    # A jelenleg futó httpd-folyamatok száma (a gyerekeket nem tartalmazza):
    echo "A httpd folyamatok száma: $ httpdProcesses" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Folyamatlista megjelenítése:
    echo "Most futó folyamatok:" >> $ tmpfile
    ps f -ef >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Az aktuális MySQL-információk megjelenítése:
    echo "A mytop eredményei:" >> $ tmpfile
    / usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    Figyeljük meg a felső parancsot, két temp fájlba írunk. Az egyik a sokkal kisebb üzenet a mobiltelefonra. Ha nem akarja, hogy reggel három órakor sürgősen értesüljön a mobiltelefonról, akkor ezt megteheti (és vegye ki a második levelező rutint később a szkriptben).


    # Jelenlegi top megjelenítése:
    echo "top now:" >> $ tmpfile
    echo "top now:" >> $ topfile
    / usr / bin / top -b -n1 >> $ tmpfile
    / usr / bin / top -b -n1 >> $ topfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    További ellenőrzések:


    # Jelenlegi kapcsolatok megjelenítése:
    echo "netstat most mutatja:" >> $ tmpfile
    / bin / netstat -p >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Ellenőrizze a lemezterületet
    echo "lemezterület:" >> $ tmpfile
    / bin / df -k >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    Ezután írja be az ideiglenes fájl tartalmát egy állandóbb naplófájlba, és e-mailben küldje el az eredményeket a megfelelő feleknek. A második levelezés az az eredmény, amely egyszerűen a "top" szabványból áll:

    # Eredmények küldése naplófájlba:
    / bin / cat $ tmpfile >> $ naplófájl

    # És e-mail eredmények a sysadmin-hoz:
    / usr / bin / mutt -s "$ gép nagy terhelési szinttel rendelkezik! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile

    És akkor néhány takarítás és kilépés:

    # Ezután távolítsa el a temp fájlt:
    rm $ tmpfile
    rm $ topfile
    fi

    #
    kilépés 0

    Remélhetőleg ez segít valakinek. Teljesen összeállított parancsfájl:

    #! / Bin / bash
    #
    # Script a rendszerterhelés átlagszintjének ellenőrzésére, hogy megpróbálja meghatározni, hogy milyen folyamatok vannak
    # túlságosan magasra véve…
    #
    # beállított környezet
    dt = "dátum +% d% b% Y-% X"
    # Nyilvánvaló, hogy változtassa meg a következő könyvtárakat, ahol a naplófájlokat ténylegesen megőrzik
    tmpfile = "/ tmp / checkSystemLoad.tmp"
    logfile = "/ tmp / checkSystemLoad.log"
    msgLog = "/ var / log / messages"
    mysqlLog = "/ var / log / mysqld.log"
    # az első mailstop a jelentések standard e-mailje. A második a mobiltelefonra vonatkozik (leolvasott jelentéssel)
    Mailstop = "[email protected]"
    mailstop1 = "[email protected]"
    gép = "hostname"
    # A következő három a mytop használatára vonatkozik - használjon egy db felhasználó, akinek tisztességes jogai vannak
    dbusr = "felhasználónév"
    dbpw = "jelszó"
    db = "yourdatabasename"
    # Az alábbiakban a terhelés szintjét ellenőrizni kell - 10 nagyon magas, ezért érdemes csökkenteni.
    levelToCheck = 10
    # Változók beállítása a rendszerből:
    loadLevel = "cat / proc / loadavg | awk" print $ 1 "
    loadLevel = $ (printf "% 0.f" $ loadLevel)

    # Ha a terhelési szint nagyobb, mint amennyit akar, indítsa el a szkriptet. Ellenkező esetben kilép a 0-ból

    ha [$ loadLevel -gt $ levelToCheck]; azután
    echo ""> $ tmpfile
    echo "**************************************" >> $ tmpfile
    echo "Dátum: $ dt" >> $ tmpfile
    echo "Rendszerterhelés és folyamatok ellenőrzése" >> $ tmpfile
    echo "**************************************" >> $ tmpfile

    # Kapjon több változót a rendszerből:
    httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"

    # Az aktuális terhelési szint megjelenítése:
    echo "Load Level: $ loadLevel" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile

    # A jelenleg futó httpd-folyamatok száma (a gyerekeket nem tartalmazza):
    echo "A httpd folyamatok száma: $ httpdProcesses" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Folyamatlista megjelenítése:
    echo "Most futó folyamatok:" >> $ tmpfile
    ps f -ef >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Az aktuális MySQL-információk megjelenítése:
    echo "A mytop eredményei:" >> $ tmpfile
    / usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Jelenlegi top megjelenítése:
    echo "top now:" >> $ tmpfile
    echo "top now:" >> $ topfile
    / usr / bin / top -b -n1 >> $ tmpfile
    / usr / bin / top -b -n1 >> $ topfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Jelenlegi kapcsolatok megjelenítése:
    echo "netstat most mutatja:" >> $ tmpfile
    / bin / netstat -p >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Ellenőrizze a lemezterületet
    echo "lemezterület:" >> $ tmpfile
    / bin / df -k >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" >> $ tmpfile

    # Eredmények küldése naplófájlba:
    / bin / cat $ tmpfile >> $ naplófájl

    # És e-mail eredmények a sysadmin-hoz:
    / usr / bin / mutt -s "$ gép nagy terhelési szinttel rendelkezik! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile

    # Ezután távolítsa el a temp fájlt:
    rm $ tmpfile
    rm $ topfile
    fi

    #
    kilépés 0