Re: Server down - решение?
Този проблем съм го наблюдавал и аз. Та ще започна от самото начало (без да искам да те подценявам).
В такива случаи първото нещо което трябва да направиш е да проследиш от къде идва проблема. Бавното отваряне в комбинация с горното означава (поне при мен беше така), че имаш slow query и mysql сървъра увисва, както и апачето което товари машината. Надявам се, че имаш роот достъп за да можеш да изпълниш всичко от долните
Стъпките които е добре да направиш:
1. Отвори си конфигурационния файл който се намира тук /etc/my.cnf и добави следните редове (това ще записва всички запитвания към базата, които имат продължителност повече от 5 секунди).
Код:
log-slow-queries = /var/log/mysql-slow.log
long_query_time = 5
2. Добави този ред из файла - max_connections=300 (това ще увеличи броя на максималните връзки към базата от 100 които са по подразбиране на 300 за да нямаш проблеми докато изследваш проблема)
3. След това създай въпросния файл, примерно с командата touch /var/log/mysql-slow.log и му дай права за писане от сървъра chmod 755 /var/log/mysql-slow.log
4. Рестартирай mysqld с /etc/init.d/mysqld restart
5. С помощта на phpmyadmin оптимизирай всяка една таблица от базите ти, напълно е възможно някоя повредена таблица да ти генерира бавните запитвания.
6. Остава ти да чакаш и от време на време да проверяваш горния лог.
Имай предвид, че с увеличаване на броя връзки, ще се увеличи и размера на рам паметта, която се ползва от mysqld.
Ако си на споделен хостинг, голяма част от тях позволяват ползването на къстъм файл за конфигурация на mysql, но няма да можеш да логваш, а единствено да предадеш параметъра от точка 2 като поставиш файла my.cnf в папката /home/caprice/public_html/
Отново ако имаш руут достъп до сървъра и не ти се кисне пред терминала за да следиш натоварването, може да ползваш долното скриптче, което ползвам от преди време за имейл нотификация при високо натоварване на сървъра. Стъпките за да го ползваш са следните:
1. Създаваш файл /home/caprice/restart.sh, чието съдържание да е нещо такова:
Код:
#!/bin/sh
check=`cat /proc/loadavg | sed 's/\./ /' | awk '{print $1}'`
if [ $check -gt 8 ]
then
ADMIN=tvoia@email.com
host=`hostname`
res=`top -bn 1`
/usr/sbin/sendmail -f $ADMIN -t << sendemail
To: $ADMIN
Subject: High load on [$host]
Load Average : $check
Top command :
$res
sendemail
killall httpd
killall mysqld
wait 10
/etc/init.d/httpd restart
/etc/init.d/mysqld restart
fi
Целта на скрипта е следната: Проверява натоварването на сървъра и ако то е над 8 се изпраща имейл на зададения в примера по-горе, спира всички процеси свързани с апачето, спира всички процеси свързани с mysqld, изчаква 10 секунди да се нормализират нещата и рестартира апаче и майскл. Ако искаш само да получаваш имейл, без да се рестартират услугите, скрипта трябва да изглежда така:
Код:
#!/bin/sh
check=`cat /proc/loadavg | sed 's/\./ /' | awk '{print $1}'`
if [ $check -gt 8 ]
then
ADMIN=tvoia@email.com
host=`hostname`
res=`top -bn 1`
/usr/sbin/sendmail -f $ADMIN -t << sendemail
To: $ADMIN
Subject: High load on [$host]
Load Average : $check
Top command :
$res
sendemail
fi
2. Даваш му права за изпълняване chmod 744 /home/caprice/restart.sh
3. Създаваш файл /etc/cron.d/auto_restart, със съдържание
Код:
* * * * * root /home/caprice/restart.sh >> /dev/null 2>&1
Това ще стартира скрипта всяка минута, който ще проверява за натоварване над 8. Не се притеснявай, няма да получаваш информация, че кронтаба извършва тази процедура.
4. Рестартираш крон демона /etc/init.d/crond restart
Естествено тази цифра от 8 може да си я промениш на колкото ти е удобно. За едно ядро, нормално ползване на процесора е 1.00, за две 2.00. В зависимост от това колко процесора и ядра имаш, нещата може да седят по-поразличен начин при теб. Аз имам достъп до две ядра и за това съм сложил цифрата 8, което значи, че натоварването е 4 пъти повече от оптималното (което свидетелства за проблем).
Ако имаш други питания - драскай, или ми пиши в скайп за по-бързо разрешаване на проблемите.