2024 Autor: Peter John Melton | [email protected]. Naposledy změněno: 2024-01-31 06:09
Pokud jste administrátor po určitou dobu, určitě jste zjistili situace, kdy server vystupuje při využití CPU nebo při využití paměti a / nebo zatížení. Spuštění "nahoru" vám vždy neposkytuje odpověď. Takže, jak zjistíte, že ty záludné procesy, které žvýkají vaše systémové prostředky, aby je mohly zabít?
Následující skript může pomoci. Byl napsán pro webový server, takže některé jeho části jsou specificky vyhledávány procesy httpd a některé části, které se zabývají MySQL. V závislosti na nasazení serveru stačí komentovat / smazat tyto oddíly a přidat další. Měla by být použita jako výchozí bod.
Předpoklady pro tuto verzi skriptu jsou některé freeware vydané pod GNU General Public License s názvem mytop (k dispozici na adrese https://jeremy.zawodny.com/mysql/mytop/), což je fantastický nástroj pro kontrolu fungování MySQL. Stárne, ale stále funguje skvěle pro naše účely. Navíc používám mutt jako mailer - můžete zkusit změnit skript jednoduše pomocí linuxu postaveného v utilitě `mail`. Spouštím ji přes cron každou hodinu; upravte podle svého uvážení. Oh - a tento skript musí běžet jako root, protože čte z některých chráněných oblastí serveru.
Takže začneme, že?
Nejprve nastavte proměnné skriptu:
#!/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
Poté zkontrolujte úroveň zatížení a zkontrolujte, zda má skript pokračovat:
# 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
A pokračujte v kontrolách a zapisujte výsledky do dočasného souboru. Přidejte nebo odstraňte položky odtud, kde je to vhodné pro vaši situaci:
# 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
Všimněte si, že pomocí příkazu "top" píšeme dva soubory temp. Jeden je pro mnohem menší zprávu na mobilní telefon. Pokud si nepřejete naléhavost upozornění na mobilní telefon ve tři ráno, můžete si to vzít (a vyřadit druhou poštovní rutinu později ve skriptu).
# 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
Další kontroly:
# 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
Poté napište dočasný soubor do trvalějšího souboru protokolu a výsledky zašlete e-mailem příslušným stranám. Druhá zásilka je výsledkem srovnatelných výsledků, které se skládají jednoduše z "špičkového" standardu:
# 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
A pak nějaké úklid a výstup:
# And then remove the temp file: rm $tmpfile rm $topfile fi
# exit 0
Doufejme, že to někomu pomůže. Plně sestavený skript 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
Doporučuje:
Jak automaticky aktualizovat systémové nástroje nebo webové soubory pomocí skriptu
Jednou z nejlepších věcí, které se týkají většiny systémových nástrojů, je jejich přenositelnost. Mnoho prostě je distribuováno přímo jako exe nebo v souboru zip a je připraveno k použití bez nutnosti instalace. Vzhledem k jednoduchosti použití jsou tyto typy aplikací snadno aktualizovány, ale mnoho z nich nemá žádnou formu automatické aktualizace. Náš updateFromWeb skript řeší tento problém, protože dělá instalaci aktualizací do přenosných aplikací, nebo jakýkoli soubor dost
Nahrávání souborů na server FTP pomocí pravého kliknutí pomocí tohoto jednoduchého skriptu
I když je k dispozici nesčetné množství FTP klientů, není nic jednoduššího než odesílání souborů na server FTP pravým tlačítkem myši. Podobně je k dispozici mnoho nástrojů, které tuto funkci přidávají do systému Windows, ale pro geek je zcela uspokojivé odinstalovat "další utilitu" a nahradit ji vlastním nástrojem.
Diagnostikujte problémy s hardwarem počítače pomocí disku CD Ubuntu
Takže váš počítač náhodně vypne nebo vám dává modrou obrazovku smrti, ale nemůžete zjistit, co se děje. Problémem může být špatná paměť nebo hardware, a naštěstí Ubuntu Live CD obsahuje některé nástroje, které vám pomohou přijít na to.
Uzamčeno ze serveru Plex Server a nastavení serveru? Zde je oprava!
Pokud jste uzamčeni z Plex Serveru a nastavení serveru, přestože je vaše uživatelské jméno a heslo správné, pak tento příspěvek vám pomůže vyřešit problém v systémech Windows i Linux. Tyto návrhy použijte k opětovnému přístupu.
Opravte problémy s pomalým načítáním a vyrovnáváním obsahu YouTube
Pokud je YouTube pomalé načítání nebo ukládání do vyrovnávací paměti videa, i když je váš internet rychlý, tyto praktické tipy vám pomohou rychleji načítat videa YouTube.