Здравствуйте!
Нужна срочная помощь.
Сегодня при попытке зайти на сайт выдало вот такое вот:
Site off-line
The site is currently not available due to technical problems. Please try again later. Thank you for your understanding.
If you are the maintainer of this site, please check your database settings in the settings.php file and ensure that your hosting provider's database server is running. For more help, see the handbook, or contact your hosting provider.
The mysql error was: Too many connections.
При этом - сайт висит на своем сервере. В качестве операционки используется Ubuntu Server.
Когда сайт выдает такое зайти на сервак довольно сложно - процессор загружен по полной и оперативка забита под завязку. Приходится сервер перезагружать (Alt + PrtSc + R, E, I, S, U,
После перезапуска сайт работает минут 5 и опять сваливается в то же сообщение.
Если в этот промежуток успеть включить режим обслуживания - все работает нормально и ничего не выскакивает.
Раньше такого не наблюдалось
Две возможных предпосылки - сегодня довольно большая посещаемость сайта (если раньше - максимум 800 в день - сегодня уже 4000 было, завтра возможно больше. И это чисто ориинальные посещения. Просмотры страниц в среднем в день составляли по 4000 страниц, сегодня - 30 тыс. страниц)
Второе - Сегодня было добавлено много материала (нод) на сайт, хотя и раньше добавления таких объемов происходили и все нормально.
Так что у меня подозрение на первое - большую посещаемость.
Причем продлится она продлится - это точно...
В связи с чем - нужна помощь! Сейчас висит на обслуживании сайт.
Может где в какие логи надо глянуть чтобы определить причину и выход - пишите - гляну...
Комментарии
За решение проблем подобного рода, я обычно беру деньги.
И тут есть за что брать, простым наскоком - посмотрите тут, посмотрите там - такое не решается.
О еще - в phpmyadmin пишет внизу такое:
Раньше не наблюдалось...
Сайты, висящие на том же движке в мультисайтинге работают нормально...
Возможно Мускуль отключен.
gor, а так не было подобных случаев?
Почитал где-то что стоит почистить таблицы кэша, но надолго ли поможет?
Да и они все пустые, кроме cache_menu - в ней 4377 строк... хмм... не много?
Было, и много раз, и во многих случаях причины разные, и не во всех случаях возможно простое решение.
Нелогично - когда сайт вешаю на обслуживание сам ведь могу все нормально наблюдать... да и другие сайты на движке пашут...
Ну так мне хотябы из того что было...
Да - уже пробовал менять возможно число запросов - со 100 дефолтных до 250 - разницы не обнаружил - такой же провис...
Стоит таблицы cache перводить в InnoDB?
Может увеличить количество возможных соединений с субд. Хотя как мне думается Друпал через одно должен все слать
О еще - по отчетам глянул - много запросов поиска посетители вводили...
Может тоже как-нить поможет...
В таблице search_index 100573 строки...
Как уже написал - увеличил с 100 до 250 - разницы по скорости подвисаний не заметил
как можно посмотреть число пользователей в данный момент? Читал тут темку с залочеными пользователями что все забили...
Железо не справляется, похоже..
Я умал об этом...
В принципе - в самый пик в среднем производилось по одному запросу страницы в секунду, в то время если посмотреть в отчетах популярные страницы видно что среднее время генерации страницы колеблется от 0,5 секунды до 8 секунд.
В связи с чем еще вопрос - какое время генерации страницы нормальное?
Характеристики железа чуть позже напишу...
А можно ли сделать чтобы при большой загрузке сервера загружался не сайт, а сообщение что сервер перегружен...
То есть не дожидаться когда сервер повиснет напрочь, а заранее ослабить нагрузку на него таким образом...
Это можно сделать стандартными средствами drupal. Посмотри в сторону модуля throttle, который в ходит в состав drupal 6.
Действительно
Спасибо, как-то забыл про него - по началу за ненадобностью отключил...
Возникает немного другой вопрос - как определить порог, при котором нагрузка на сервак становится критической вплоть до зависания?
Сейчас вот например на сайте 80 пользователей - полет нормальный
Почитал...
Так понимаю этот модуль позволяет отключать модули при определенном пороге посещаемости сайта...
А вот так чтобы полностью не дать доступ, а только сообщение о перегруженности вывести - не нашел...
Или как-нить мудрено можно это сделать?
Ты знаешь, почему-то в голову лезет аналогия с DDoS. Попробуй поискать информацию, как противодействовать этому типу атак, может найдёшь какой-нибудь модуль для apache или drupal.
А пока создай модуль «site_is_down» с таким кодом:
<?php
// $Id$
/**
* Implementation of hook_init().
*
* Если модуль throttle сообщает, что сайт под большой нагрузкой,
* выведем сообщение об этом и прекратим дальнейшие действия.
*/
function site_is_down_init() {
// Стоп-кран. Если в корне есть файл с таким именем,
// сообщение об ошибке не выведется.
if (is_file('disable_site_is_down')) return;
$throttle = module_invoke('throttle', 'status');
if ($throttle) {
echo theme('site_is_down');
exit;
}
}
/**
* Implementation of hook_theme().
*/
function site_is_down_theme() {
return array(
'site_is_down' => array(
'arguments' => array(),
),
);
}
function theme_site_is_down() {
return 'Капец сайту ';
}
?>
Решение временное, но это всё же лучше, чем отображать ошибку базы данных.
Однако хочу предупредить, что код не тестировал, не могу гарантировать, что не случится такое, что вообще никто не сможет зайти на сайт. Поэтому в код встроил стоп-кран.
Спасибо, попробую, хотя сегодня не наблюдается никаких лагов...
Видать информация в сми о сайте - лучший вариант создания DDoS атаки
Помню когда по орт сказали про какой-то сайт устройства на работу в вечерних новостях - так там сервак до ночи лежал
А так кто не подскажет - какие нормальные параметры сервака для Drupal с сайтом посещаемости от 1000 до 5000 в день?
у нас сервак интел какой-то 2700 Mhz с гигом оперативы - этого достаточно? или нет? я вот думаю может пара добить...
может это просто хостер копается
Говорю же - сайт на нашем серваке личном...
тогда все намного проще
в свое время так же погибали сайты (15шт), решилось долгим курением разных документов по оптимизации mysql и выделением под БД отдельного сервера (в моем случае это был 2GHz Core 2, 2GB RAM, винт к сожалению SATA ) начало выдерживать до 15к уников.
Это может быть связано с поисковиками - посмотрите кто приходит по логам и увеличте паузу между обработками страниц поисковиками.
если too many mysql connecitons то копать надо в сторону mysql. возможно висят какие-то persistent соединения, которые не закрываются, а может быть просто слишком малое число одновременных соединений к мускулу для данного пользователя
в любом случае первое что надо сделать - смотреть конфиги мускула и пользователя под которым коннектится друпал к базе