Dijagnosticiranje Linuxovih problema s učitavanjem servisa s jednostavnim skriptom

Dijagnosticiranje Linuxovih problema s učitavanjem servisa s jednostavnim skriptom
Dijagnosticiranje Linuxovih problema s učitavanjem servisa s jednostavnim skriptom

Video: Dijagnosticiranje Linuxovih problema s učitavanjem servisa s jednostavnim skriptom

Video: Dijagnosticiranje Linuxovih problema s učitavanjem servisa s jednostavnim skriptom
Video: 👉TELL THE WORLD [Feature Film] History of The Seventh-day Adventist Church 🙏 - YouTube 2024, Travanj
Anonim

Ako ste bili administrator za bilo koju duljinu vremena, zasigurno ste otkrili situacije u kojima se poslužitelj nalazi u korištenju procesora ili korištenju memorije i / ili razine opterećenja. Trčanje `top` neće vam uvijek dati odgovor. Pa kako možete pronaći one tajne postupke koji gube svoje resurse sustava kako bi ih mogli ubiti?

Sljedeća bi skripta mogla pomoći. Napisana je za web poslužitelj, tako da ima neke dijelove koji posebno traže httpd procese i neke dijelove koji se bave MySQL-om. Ovisno o raspoređivanju poslužitelja, jednostavno komentirajte / izbrišite te odjeljke i dodajte druge. Treba se koristiti za polaznu točku.

Preduvjeti za ovu verziju skripte su neki freeware izdani pod GNU Općom javnom licencom pod nazivom mytop (dostupno na https://jeremy.zawodny.com/mysql/mytop/), što je fantastičan alat za provjeru izvedbe MySQL-a. Stari je, ali ovdje i dalje djeluje sjajno za naše svrhe. Osim toga, koristim mutt kao mailer - preporučujemo da promijenite skriptu da biste jednostavno upotrijebili Linux ugrađeni u program `mail`. Vodim ga putem cron svakog sata; prilagodite kako vam odgovara. Oh - i ta se skripta mora izvoditi kao korijen jer se čita iz nekih zaštićenih područja poslužitelja.

Počnimo, zar ne?

Najprije postavite varijable skripte:

#!/bin/bash # # Script to check system load average levels to try to determine # what processes are taking it overly high… # # 07Jul2010 tjones # # set environment dt=`date +%d%b%Y-%X` # Obviously, change the following directories to where your log files actually are kept tmpfile='/tmp/checkSystemLoad.tmp' logfile='/tmp/checkSystemLoad.log' msgLog='/var/log/messages' mysqlLog='/var/log/mysqld.log' # the first mailstop is standard email for reports. Second one is for cell phone (with a pared down report) mailstop='[email protected]' mailstop1='[email protected]' machine=`hostname` # The following three are for mytop use - use a db user that has decent rights dbusr='username' dbpw='password' db='yourdatabasename' # The following is the load level to check on - 10 is really high, so you might want to lower it. levelToCheck=10

Zatim provjerite razinu opterećenja kako biste vidjeli hoće li se skripta nastaviti:

# Set variables from system: loadLevel=`cat /proc/loadavg | awk '{print $1}'` loadLevel=$( printf '%0.f' $loadLevel )

# if the load level is greater than you want, start the script process. Otherwise, exit 0

if [ $loadLevel -gt $levelToCheck ]; then echo '' > $tmpfile echo '**************************************' >>$tmpfile echo 'Date: $dt ' >>$tmpfile echo 'Check System Load & Processes ' >>$tmpfile echo '**************************************' >>$tmpfile

I nastavite kroz provjere, zapisujući rezultate u privremenu datoteku. Dodajte ili izbrišite stavke iz ovdje gdje je to primjenjivo na vašu situaciju:

# Get more variables from system: httpdProcesses=`ps -def | grep httpd | grep -v grep | wc -l`

# Show current load level: echo 'Load Level Is: $loadLevel' >>$tmpfile echo '*************************************************' >>$tmpfile

# Show number of httpd processes now running (not including children): echo 'Number of httpd processes now: $httpdProcesses' >>$tmpfile echo '*************************************************' >>$tmpfile echo '' >>$tmpfile

# Show process list: echo 'Processes now running:' >>$tmpfile ps f -ef >>$tmpfile echo '*************************************************' >>$tmpfile echo '' >>$tmpfile

# Show current MySQL info: echo 'Results from mytop:' >>$tmpfile /usr/bin/mytop -u $dbusr -p $dbpw -b -d $db >>$tmpfile echo '*************************************************' >>$tmpfile echo '' >>$tmpfile

Obavijest s gornjom naredbom pišemo na dvije temp datoteke. Jedan je za mnogo manju poruku mobitelu. Ako ne želite hitno obavijestiti mobilne telefone u tri ujutro, možete to izvaditi (i izvadite drugu mailing rutinu kasnije u skripti).

# Show current top: echo 'top now shows:' >>$tmpfile echo 'top now shows:' >>$topfile /usr/bin/top -b -n1 >>$tmpfile /usr/bin/top -b -n1 >>$topfile echo '*************************************************' >>$tmpfile echo '' >>$tmpfile

Više provjera:

# Show current connections: echo 'netstat now shows:' >>$tmpfile /bin/netstat -p >>$tmpfile echo '*************************************************' >>$tmpfile echo '' >>$tmpfile

# Check disk space echo 'disk space:' >>$tmpfile /bin/df -k >>$tmpfile echo '*************************************************' >>$tmpfile echo '' >>$tmpfile

Zatim napišite sadržaj privremene datoteke u trajniju dnevničku datoteku i pošaljite e-mail rezultate odgovarajućim strankama. Druga pošiljka su dobiveni rezultati koji se sastoje samo od standarda iz "vrha":

# Send results to log file: /bin/cat $tmpfile >>$logfile

# And email results to sysadmin: /usr/bin/mutt -s '$machine has a high load level! - $dt' -a $mysqlLog -a $msgLog $mailstop <$tmpfile /usr/bin/mutt -s '$machine has a high load level! - $dt' $mailstop1 <$topfile echo '**************************************' >>$logfile

I onda neki domaćin i izlaz:

# And then remove the temp file: rm $tmpfile rm $topfile fi

# exit 0

Nadamo se da ovo pomaže nekome vani. Potpuno sastavljena skripta je:

#!/bin/bash # # Script to check system load average levels to try to determine what processes are # taking it overly high… # # set environment dt=`date +%d%b%Y-%X` # Obviously, change the following directories to where your log files actually are kept tmpfile='/tmp/checkSystemLoad.tmp' logfile='/tmp/checkSystemLoad.log' msgLog='/var/log/messages' mysqlLog='/var/log/mysqld.log' # the first mailstop is standard email for reports. Second one is for cell phone (with a pared down report) mailstop='[email protected]' mailstop1='[email protected]' machine=`hostname` # The following three are for mytop use - use a db user that has decent rights dbusr='username' dbpw='password' db='yourdatabasename' # The following is the load level to check on - 10 is really high, so you might want to lower it. levelToCheck=10 # Set variables from system: loadLevel=`cat /proc/loadavg | awk '{print $1}'` loadLevel=$( printf '%0.f' $loadLevel )

# if the load level is greater than you want, start the script process. Otherwise, exit 0

if [ $loadLevel -gt $levelToCheck ]; then echo '' > $tmpfile echo '**************************************' >>$tmpfile echo 'Date: $dt ' >>$tmpfile echo 'Check System Load & Processes ' >>$tmpfile echo '**************************************' >>$tmpfile

# Get more variables from system: httpdProcesses=`ps -def | grep httpd | grep -v grep | wc -l`

# Show current load level: echo 'Load Level Is: $loadLevel' >>$tmpfile echo '*************************************************' >>$tmpfile

# Show number of httpd processes now running (not including children): echo 'Number of httpd processes now: $httpdProcesses' >>$tmpfile echo '*************************************************' >>$tmpfile echo '' >>$tmpfile

# Show process list: echo 'Processes now running:' >>$tmpfile ps f -ef >>$tmpfile echo '*************************************************' >>$tmpfile echo '' >>$tmpfile

# Show current MySQL info: echo 'Results from mytop:' >>$tmpfile /usr/bin/mytop -u $dbusr -p $dbpw -b -d $db >>$tmpfile echo '*************************************************' >>$tmpfile echo '' >>$tmpfile

# Show current top: echo 'top now shows:' >>$tmpfile echo 'top now shows:' >>$topfile /usr/bin/top -b -n1 >>$tmpfile /usr/bin/top -b -n1 >>$topfile echo '*************************************************' >>$tmpfile echo '' >>$tmpfile

# Show current connections: echo 'netstat now shows:' >>$tmpfile /bin/netstat -p >>$tmpfile echo '*************************************************' >>$tmpfile echo '' >>$tmpfile

# Check disk space echo 'disk space:' >>$tmpfile /bin/df -k >>$tmpfile echo '*************************************************' >>$tmpfile echo '' >>$tmpfile

# Send results to log file: /bin/cat $tmpfile >>$logfile

# And email results to sysadmin: /usr/bin/mutt -s '$machine has a high load level! - $dt' -a $mysqlLog -a $msgLog $mailstop <$tmpfile /usr/bin/mutt -s '$machine has a high load level! - $dt' $mailstop1 <$topfile echo '**************************************' >>$logfile

# And then remove the temp file: rm $tmpfile rm $topfile fi

# exit 0

Preporučeni: