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