Ja esat bijis administrators kādā laika periodā, jūs noteikti atklājat situācijas, kad serveris palielina CPU izmantojumu vai atmiņas izmantošanu un / vai slodzes līmeņus. Darbības "augšā" ne vienmēr jums atbildi, vai nu. Tātad, kā jūs atradīsiet tos sneaky procesus, kas izvārās jūsu sistēmas resursus, lai varētu tos nogalināt?
Šāds skripts varētu palīdzēt. Tas tika rakstīts tīmekļa serverim, tāpēc ir daži tā daļas, kas īpaši meklē httpd procesus un dažas daļas, kas nodarbojas ar MySQL. Atkarībā no servera izvietošanas vienkārši komentējiet / dzēsiet šīs sadaļas un pievienojiet citas. To vajadzētu izmantot sākuma punktam.
Šādas skripta versijas priekšnoteikumi ir daži bezmaksas rīki, kas tiek izplatīti saskaņā ar GNU Vispārējo publisko licenci, ko sauc par mytop (pieejams vietnē http://jeremy.zawodny.com/mysql/mytop/), kas ir fantastisks rīks, lai pārbaudītu, kā darbojas MySQL. Tas kļūst vecs, bet joprojām darbojas lieliski mūsu mērķiem šeit.
Turklāt es izmantoju mutt kā mailer - iespējams, vēlēsities mainīt skriptu, lai vienkārši izmantotu lietojumprogrammā 'mail' uzbūvēto linux. Es to vadu caur cron katru stundu; pielāgojiet, kā redzat. Ak - un šim skriptam jārīkojas kā root, jo tas tiek lasīts no dažām aizsargātām servera vietām.
Tātad sāksim, vai mēs?
Vispirms iestatiet skripta mainīgos:
#! / bin / bash
#
# Skripts, lai mēģinātu noteikt sistēmas slodzes vidējo līmeni
# kādi procesi to pārāk augstu ...
#
# 07Jul2010 tjones
#
# iestatīta vide
dt = "datums +% d% b% Y-% X"
# Acīmredzot mainiet šādus direktorijus, kur jūsu log faili tiek faktiski saglabāti
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfile = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysqlLog = "/ var / log / mysqld.log"
# pirmais mailstop ir standarta e-pasts ziņojumiem. Otrs ir mobilais tālrunis (ar izlasītu ziņojumu)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
mašīna = "resursdatora nosaukums"
# Turpmākie trīs ir paredzēti, lai izmantotu mytop - izmantojiet db lietotāju, kuram ir pienācīgas tiesības
dbusr = "lietotājvārds"
dbpw = "parole"
db = "yourdatabasename"
# Turpmāk norādīts slodzes līmenis, uz kuru jāpārbauda - 10 ir ļoti liels, tāpēc jūs varētu vēlēties to samazināt.
levelToCheck = 10
Pēc tam pārbaudiet slodzes līmeni, lai noskaidrotu, vai skripts jāturpina:
# Iestatīt mainīgos no sistēmas:
loadLevel = "cat / proc / loadavg | awk" (drukāt $ 1) "
loadLevel = $ (printf "% 0.f" $ loadLevel)
# ja slodzes līmenis ir lielāks nekā vēlaties, sāciet skripta procesu. Pretējā gadījumā izejiet no 0
ja [$ loadLevel -gt $ levelToCheck]; tad
echo ""> $ tmpfile
echo "**************************************" >> $ tmpfile
echo "Date: $ dt" >> $ tmpfile
echo "Pārbaudīt sistēmas ielādi un procesus" >> $ tmpfile
echo "**************************************" >> $ tmpfile
Un turpini pārbaudes, rakstot rezultātus pagaidu failā. Šeit pievienojiet vai izdzēsiet vienumus, ja tie attiecas uz jūsu situāciju:
# Saņemiet vairāk mainīgo no sistēmas:
httpdProcesses = "ps -def | grep httpd | grep -v grep | wc-l"
# Rādīt pašreizējo slodzes līmeni:
echo "Load Level Is: $ loadLevel" >> $ tmpfile
echo "************************************************ * ">> $ tmpfile# Parādiet pašreiz notiekošo httpd procesu skaitu (izņemot bērnus):
echo "Pašreizējais httpd procesu skaits: $ httpdProcesses" >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Parādīt procesu sarakstu:
echo "Procesi, kas tagad darbojas:" >> $ tmpfile
ps f -ef >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Parādīt pašreizējo MySQL informāciju:
echo "Rezultāti no mytop:" >> $ tmpfile
/ usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile
Paziņojums ar augšējo komandu, mēs rakstām uz diviem temp failiem. Viens ir par daudz mazāku ziņojumu mobilajam tālrunim. Ja jūs nevēlaties, lai brīdinājumi par mobilo telefonu būtu steidzami, trīs reizes no rīta, to var izdarīt (un vēlāk skriptā izņemiet otro pasta sūtīšanas rutīnu).
# Parādīt pašreizējo top:
echo "augšdaļa tagad parāda:" >> $ tmpfile
echo "augšdaļa tagad parāda:" >> $ topfile
/ usr / bin / top-b -n1 >> $ tmpfile
/ usr / bin / top-b -n1 >> $ topfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile
Vairāk pārbaudes:
# Parādīt pašreizējos savienojumus:
echo "netstat tagad parāda:" >> $ tmpfile
/ bin / netstat-p >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile
# Pārbaudiet diska vietu
echo "diska vieta:" >> $ tmpfile
/ bin / df -k >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile
Pēc tam rakstiet pagaidu faila saturu uz pastāvīgāku žurnālu failu un nosūtiet rezultātus attiecīgajām pusēm. Otrais pasta sūtījums ir noņemtie rezultāti, kas sastāv tikai no standarta no "augšējās":
# Sūtīt rezultātus žurnāla failam:
/ bin / kaķis $ tmpfile >> $ logfile
# Un e-pasta rezultātus sysadmin:
/ usr / bin / mutt -s "$ mašīnai ir augsts slodzes līmenis! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$ tmpfile / usr / bin / mutt -s " ! - $ dt "$ mailstop1> $ logfile
Un tad daži mājturības un izejas:
# Un tad noņemiet temp failu:
rm $ tmpfile
rm $ topfile
fi
#
iziet no 0
Cerams, ka tas palīdz kādam tur. Pilnībā samontēts skripts ir:
#! / bin / bash
#
# Skripts, lai pārbaudītu sistēmas slodzes vidējos līmeņus, lai mēģinātu noteikt, kādi procesi ir
# ņemot to pārāk augstu ...
#
# iestatīta vide
dt = "datums +% d% b% Y-% X"
# Acīmredzot mainiet šādus direktorijus, kur jūsu log faili tiek faktiski saglabāti
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfile = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysqlLog = "/ var / log / mysqld.log"
# pirmais mailstop ir standarta e-pasts ziņojumiem. Otrs ir mobilais tālrunis (ar izlasītu ziņojumu)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
mašīna = "resursdatora nosaukums"
# Turpmākie trīs ir paredzēti, lai izmantotu mytop - izmantojiet db lietotāju, kuram ir pienācīgas tiesības
dbusr = "lietotājvārds"
dbpw = "parole"
db = "yourdatabasename"
# Turpmāk norādīts slodzes līmenis, uz kuru jāpārbauda - 10 ir ļoti liels, tāpēc jūs varētu vēlēties to samazināt.
levelToCheck = 10
# Iestatīt mainīgos no sistēmas:
loadLevel = "cat / proc / loadavg | awk" (drukāt $ 1) "
loadLevel = $ (printf "% 0.f" $ loadLevel)
# ja slodzes līmenis ir lielāks nekā vēlaties, sāciet skripta procesu. Pretējā gadījumā izejiet no 0
ja [$ loadLevel -gt $ levelToCheck]; tad
echo ""> $ tmpfile
echo "**************************************" >> $ tmpfile
echo "Date: $ dt" >> $ tmpfile
echo "Pārbaudīt sistēmas ielādi un procesus" >> $ tmpfile
echo "**************************************" >> $ tmpfile# Saņemiet vairāk mainīgo no sistēmas:
httpdProcesses = "ps -def | grep httpd | grep -v grep | wc-l"# Rādīt pašreizējo slodzes līmeni:
echo "Load Level Is: $ loadLevel" >> $ tmpfile
echo "************************************************ * ">> $ tmpfile# Parādiet pašreiz notiekošo httpd procesu skaitu (izņemot bērnus):
echo "Pašreizējais httpd procesu skaits: $ httpdProcesses" >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Parādīt procesu sarakstu:
echo "Procesi, kas tagad darbojas:" >> $ tmpfile
ps f -ef >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Parādīt pašreizējo MySQL informāciju:
echo "Rezultāti no mytop:" >> $ tmpfile
/ usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Parādīt pašreizējo top:
echo "augšdaļa tagad parāda:" >> $ tmpfile
echo "augšdaļa tagad parāda:" >> $ topfile
/ usr / bin / top-b -n1 >> $ tmpfile
/ usr / bin / top-b -n1 >> $ topfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Parādīt pašreizējos savienojumus:
echo "netstat tagad parāda:" >> $ tmpfile
/ bin / netstat-p >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Pārbaudiet diska vietu
echo "diska vieta:" >> $ tmpfile
/ bin / df -k >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Sūtīt rezultātus žurnāla failam:
/ bin / kaķis $ tmpfile >> $ logfile# Un e-pasta rezultātus sysadmin:
/ usr / bin / mutt -s "$ mašīnai ir augsts slodzes līmenis! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$ tmpfile / usr / bin / mutt -s " ! - $ dt "$ mailstop1> $ logfile# Un tad noņemiet temp failu:
rm $ tmpfile
rm $ topfile
fi#
iziet no 0