If-Koubou

Diagnoosi Linux-palvelin lataa ongelmat yksinkertaisella komentosarjalla

Diagnoosi Linux-palvelin lataa ongelmat yksinkertaisella komentosarjalla (Miten)

Jos olet ollut ylläpitäjä mihinkään aikaan, olet varmasti löytänyt tilanteita, joissa palvelin piilee CPU: n käytössä tai muistin käytössä ja / tai kuormitustasolla. Running "top" ei aina anna sinulle vastausta. Joten miten löydät ne salaiset prosessit, jotka purkavat järjestelmän resursseja voidakseen tappaa heidät?

Seuraava käsikirjoitus voi auttaa. Se on kirjoitettu web-palvelimelle, joten siinä on joitain osia siitä, jotka etsivät erityisesti httpd-prosesseja ja joitain osia, jotka käsittelevät MySQL: tä. Palvelimen käyttöönoton mukaan voit yksinkertaisesti kommentoida / poistaa kyseisiä osioita ja lisätä muita. Sitä tulisi käyttää lähtökohtana.

Tämä skriptiversion edellytys on muutamia freeware-ohjelmia, jotka julkaistiin GNU General Public License -sivustolla nimeltä mytop (saatavilla osoitteessa http://jeremy.zawodny.com/mysql/mytop/), joka on loistava työkalu MySQL: n suorittamien ominaisuuksien tarkistamiseen. Se vanhenee, mutta silti toimii hyvin meidän tarkoituksemme täällä.
Lisäksi käytän muttia sähköpostina - voit vaihtaa komentosarjan yksinkertaisesti käyttää sähköpostipalveluun rakennettua linuxia. Juoksin sen kautta cron tunnin välein; säädä sopivaksi. Oh - ja tämä kirjoitus täytyy toimia pääkäyttäjänä, koska se lukee palvelimen tietyistä suojatuista alueista.

Aloitetaan siis, vai mitä?

Määritä ensin skriptimuuttujasi:

#! / Bin / bash
#
# Script tarkistaa järjestelmän kuormituksen keskiarvot yrittää määrittää
# mitä prosessit vievät sen liian korkeaksi ...
#
# 07Jul2010 tjones
#
# asetettu ympäristö
dt = "päivämäärä +% d% b% Y-% X"
# Muuta seuraavia hakemistoja, joihin lokitiedostot säilytetään
tmpfile = "/ tmp / checkSystemLoad.tmp"
lokitiedosto = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysqlLog = "/ var / log / mysqld.log"
# ensimmäinen postilähetys on tavallinen raportti sähköpostille. Toinen on matkapuhelimeen (pared down raportti)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
kone = "isäntänimi"
# Seuraavat kolme on tarkoitettu mytop-käyttöön - käytä db-käyttäjää, jolla on kunnolliset oikeudet
dbusr = "käyttäjänimi"
dbpw = "password"
db = "yourdatabasename"
# Seuraava on kuormitustaso tarkistaa - 10 on todella korkea, joten sinun kannattaa alentaa sitä.
levelToCheck = 10

Seuraavaksi tarkista kuormitustaso ja tarkista, pitäisikö komentosarjan jatkaa:

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

# jos kuormitustaso on suurempi kuin haluat, käynnistä käsikirjoitusprosessi. Muuten poistu 0

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

Ja jatka tarkastusten kautta kirjoittamalla tulokset väliaikaiseen tiedostoon. Lisää tai poista kohteet täältä, jos se on tilanteessa:

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

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

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

# Näytä prosessiluettelo:
echo "Prosessit nyt käynnissä:" >> $ tmpfile
ps f -ef >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile

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

Huomaa ylimmällä komennolla, kirjoitamme kahteen temp-tiedostoon. Yksi on paljon pienempi viesti matkapuhelimeen. Jos et halua matkapuhelimen hälytysten kiireellisyyttä kolmella aamulla, voit ottaa tämän pois (ja ottaa pois toisen postitusrutiinin myöhemmin komentosarjassa).


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

Lisää tarkastuksia:


# 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

Sitten kirjoitetaan tilapäisen tiedoston sisältö pysyvämmäksi lokitiedostoksi ja lähetetään tulokset asianmukaisille osapuolille. Toinen postitus on pared down tulokset, jotka koostuvat pelkästään standardista "ylhäältä":

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

# Ja sähköpostitulokset sysadmin:
/ usr / bin / mutt -s "$ koneella on korkea kuormitustaso! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$ tmpfile / usr / bin / mutt -s ! - $ dt "$ mailstop1> $ lokitiedosto

Ja sitten jotkut siivous ja poistuminen:

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

#
poistu 0

Toivottavasti tämä auttaa jokua siellä. Täysin koottu kirjoitus on:

#! / Bin / bash
#
# Script tarkistaa järjestelmän kuormituksen keskiarvot yrittää määrittää, mitkä prosessit ovat
# ottaen liian korkea ...
#
# asetettu ympäristö
dt = "päivämäärä +% d% b% Y-% X"
# Muuta seuraavia hakemistoja, joihin lokitiedostot säilytetään
tmpfile = "/ tmp / checkSystemLoad.tmp"
lokitiedosto = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysqlLog = "/ var / log / mysqld.log"
# ensimmäinen postilähetys on tavallinen raportti sähköpostille. Toinen on matkapuhelimeen (pared down raportti)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
kone = "isäntänimi"
# Seuraavat kolme on tarkoitettu mytop-käyttöön - käytä db-käyttäjää, jolla on kunnolliset oikeudet
dbusr = "käyttäjänimi"
dbpw = "password"
db = "yourdatabasename"
# Seuraava on kuormitustaso tarkistaa - 10 on todella korkea, joten sinun kannattaa alentaa sitä.
levelToCheck = 10
# Aseta muuttujat järjestelmästä:
loadLevel = "cat / proc / loadavg | awk" print $ 1 "
loadLevel = $ (printf "% 0.f" $ loadLevel)

# jos kuormitustaso on suurempi kuin haluat, käynnistä käsikirjoitusprosessi. Muuten poistu 0

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

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

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

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

# Näytä prosessiluettelo:
echo "Prosessit nyt käynnissä:" >> $ tmpfile
ps f -ef >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile

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

# Näytä nykyinen alkuun:
echo "top näyttää nyt:" >> $ tmpfile
echo "top näyttää nyt:" >> $ 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 sysadmin:
/ usr / bin / mutt -s "$ koneella on korkea kuormitustaso! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$ tmpfile / usr / bin / mutt -s ! - $ dt "$ mailstop1> $ lokitiedosto

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

#
poistu 0