Diagnosticējiet Linux servera ielādes problēmas ar vienkāršu skriptu
Ja esat bijis administrators jebkuram laika periodam, jūs noteikti esat atklājuši situācijas, kad servera spiesti tiek izmantoti CPU vai atmiņas izmantošanas un / vai slodzes līmeņos. Arī “top” vadīšana ne vienmēr sniegs atbildi. Tātad, kā jūs atradīsiet tos sneaky procesus, kas sakošļo jūsu sistēmas resursus, lai varētu nogalināt?
Šāds skripts var palīdzēt. Tas tika uzrakstīts tīmekļa serverim, tāpēc tam ir dažas tās daļas, kas meklē tieši httpd procesus un dažas daļas, kas saistītas ar MySQL. Atkarībā no jūsu servera izvietošanas vienkārši komentējiet / dzēsiet šīs sadaļas un pievienojiet citus. Tas jāizmanto sākuma punktam.
Šādas skripta versijas priekšnoteikumi ir daži freeware, kas tiek izlaisti saskaņā ar GNU General Public License, ko sauc par mytop (pieejams vietnē http://jeremy.zawodny.com/mysql/mytop/), kas ir fantastisks līdzeklis, lai pārbaudītu, kā MySQL darbojas. Tas kļūst vecs, bet joprojām strādā lieliski mūsu mērķiem.
Turklāt, es izmantoju mutt kā mailer - jūs varat mainīt skriptu, lai vienkārši izmantotu linux, kas ir iebūvēts “mail” lietderībā. Es katru stundu vada to caur cronu; pielāgojiet, kā redzat. Ak - un šim skriptam ir jādarbojas kā root, jo tas tiek nolasīts no dažām aizsargātām servera vietām.
Tātad, sāksim, vai mēs?
Pirmkārt, iestatiet skriptu mainīgos:
#! / bin / bash
#
# Script, lai pārbaudītu sistēmas slodzes vidējos līmeņus, lai mēģinātu noteikt
# kādi procesi to lieto pārāk augstu ...
#
# 07Jul2010 tjones
#
# iestatīta vide
dt = "datums +% d% b% Y-% X"
# Acīmredzot, nomainiet šādus katalogus, kur patiešām tiek glabāti jūsu žurnāla faili
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfile = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysqlLog = "/ var / log / mysqld.log"
# pirmais pasts ir standarta e-pasta ziņojums. Otrais ir mobilajam telefonam (ar atskaites atskaiti)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
machine = "hostname"
# Šīs trīs ir paredzētas mytop lietošanai - izmantojiet db lietotāju, kam ir pienācīgas tiesības
dbusr = "lietotājvārds"
dbpw = "parole"
db = "yourdatabasename"
# Sekojošais ir slodzes līmenis, lai pārbaudītu - 10 ir patiešām augsts, tāpēc jūs varētu vēlēties to samazināt.
levelToCheck = 10
Tālāk pārbaudiet slodzes līmeni, lai redzētu, vai skriptam jāturpina:
# Iestatīt mainīgos no sistēmas:
loadLevel = "kaķis / proc / loadavg | awk" print $ 1 "
loadLevel = $ (printf "% 0.f" $ loadLevel)# ja slodzes līmenis ir lielāks nekā vēlaties, sāciet skripta procesu. Pretējā gadījumā iziet no 0
ja [$ loadLevel -gt $ levelToCheck]; tad
echo ""> $ tmpfile
echo "**************************************" >> $ tmpfile
echo "Datums: $ dt" >> $ tmpfile
echo "Pārbaudīt sistēmas slodzi un procesus" >> $ tmpfile
echo "**************************************" >> $ tmpfile
Un turpiniet pārbaudes, rakstot rezultātus pagaidu failā. Pievienot vai dzēst vienumus no šeit, ja tas ir iespējams jūsu situācijā:
# Iegūstiet 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:
atbalss "Slodzes līmenis ir: $ loadLevel" >> $ tmpfile
echo "************************************************ * ">> $ tmpfile# Rādīt pašlaik darbojošos httpd procesu skaitu (neskaitot bērnus):
echo "httpd procesu skaits: $ httpdProcesses" >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Rādīt procesu sarakstu:
echo "Procesi pašlaik darbojas:" >> $ tmpfile
ps f -ef >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Rā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
Piezīme ar augšējo komandu, mēs rakstām uz diviem temp failiem. Viens ir par daudz mazāku ziņu mobilajam telefonam. Ja nevēlaties, lai mobilā telefona brīdinājumi būtu steidzami trīs no rīta, jūs varat to izņemt (un izņemt otro pasta rutīnu vēlāk skriptu).
# Rādīt pašreizējo topu:
echo "top tagad rāda:" >> $ tmpfile
echo "top tagad rāda:" >> $ topfile
/ usr / bin / top -b -n1 >> $ tmpfile
/ usr / bin / top -b -n1 >> $ topfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile
Citas pārbaudes:
# Rādīt pašreizējos savienojumus:
echo "netstat tagad parāda:" >> $ tmpfile
/ bin / netstat -p >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Pārbaudiet diska vietu
atbalss "diska vieta:" >> $ tmpfile
/ bin / df -k >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile
Pēc tam uzrakstiet pagaidu faila saturu pastāvīgākam žurnāla failam un nosūtiet rezultātus attiecīgajām pusēm. Otrais sūtījums ir rezultāts, kas ir paralēlais rezultāts, kas sastāv tikai no standarta no “top”:
# Sūtīt rezultātus uz žurnāla failu:
/ bin / cat $ tmpfile >> $ logfile# Un e-pasta rezultāti uz sysadmin:
/ usr / bin / mutt -s "$ mašīnai ir augsts slodzes līmenis! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile
Un tad daži saimniecības pakalpojumi un izeja:
# Un pēc tam noņemiet temp failu:
rm $ tmpfile
rm $ topfile
fi#
iziet no 0
Cerams, ka tas palīdzēs kādam tur. Pilnībā samontēts skripts ir:
#! / bin / bash
#
# Script, lai pārbaudītu sistēmas slodzes vidējo līmeni, lai mēģinātu noteikt, kādi procesi ir
# to pārmērīgi augsts…
#
# iestatīta vide
dt = "datums +% d% b% Y-% X"
# Acīmredzot, nomainiet šādus katalogus, kur patiešām tiek glabāti jūsu žurnāla faili
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfile = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysqlLog = "/ var / log / mysqld.log"
# pirmais pasts ir standarta e-pasta ziņojums. Otrais ir mobilajam telefonam (ar atskaites atskaiti)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
machine = "hostname"
# Šīs trīs ir paredzētas mytop lietošanai - izmantojiet db lietotāju, kam ir pienācīgas tiesības
dbusr = "lietotājvārds"
dbpw = "parole"
db = "yourdatabasename"
# Sekojošais ir slodzes līmenis, lai pārbaudītu - 10 ir patiešām augsts, tāpēc jūs varētu vēlēties to samazināt.
levelToCheck = 10
# Iestatīt mainīgos no sistēmas:
loadLevel = "kaķis / proc / loadavg | awk" print $ 1 "
loadLevel = $ (printf "% 0.f" $ loadLevel)# ja slodzes līmenis ir lielāks nekā vēlaties, sāciet skripta procesu. Pretējā gadījumā iziet no 0
ja [$ loadLevel -gt $ levelToCheck]; tad
echo ""> $ tmpfile
echo "**************************************" >> $ tmpfile
echo "Datums: $ dt" >> $ tmpfile
echo "Pārbaudīt sistēmas slodzi un procesus" >> $ tmpfile
echo "**************************************" >> $ tmpfile# Iegūstiet 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:
atbalss "Slodzes līmenis ir: $ loadLevel" >> $ tmpfile
echo "************************************************ * ">> $ tmpfile# Rādīt pašlaik darbojošos httpd procesu skaitu (neskaitot bērnus):
echo "httpd procesu skaits: $ httpdProcesses" >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Rādīt procesu sarakstu:
echo "Procesi pašlaik darbojas:" >> $ tmpfile
ps f -ef >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Rā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# Rādīt pašreizējo topu:
echo "top tagad rāda:" >> $ tmpfile
echo "top tagad rāda:" >> $ topfile
/ usr / bin / top -b -n1 >> $ tmpfile
/ usr / bin / top -b -n1 >> $ topfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Rādīt pašreizējos savienojumus:
echo "netstat tagad parāda:" >> $ tmpfile
/ bin / netstat -p >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Pārbaudiet diska vietu
atbalss "diska vieta:" >> $ tmpfile
/ bin / df -k >> $ tmpfile
echo "************************************************ * ">> $ tmpfile
echo "" >> $ tmpfile# Sūtīt rezultātus uz žurnāla failu:
/ bin / cat $ tmpfile >> $ logfile# Un e-pasta rezultāti uz sysadmin:
/ usr / bin / mutt -s "$ mašīnai ir augsts slodzes līmenis! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile# Un pēc tam noņemiet temp failu:
rm $ tmpfile
rm $ topfile
fi#
iziet no 0