Срочно! Site off-line. The mysql error was: Too many connections.

27 июля 2009 в 23:56
Аватар пользователя Nikolas Nikolas 0 23

Здравствуйте!
Нужна срочная помощь.
Сегодня при попытке зайти на сайт выдало вот такое вот:

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, Dirol
После перезапуска сайт работает минут 5 и опять сваливается в то же сообщение.
Если в этот промежуток успеть включить режим обслуживания - все работает нормально и ничего не выскакивает.
Раньше такого не наблюдалось Sad
Две возможных предпосылки - сегодня довольно большая посещаемость сайта (если раньше - максимум 800 в день - сегодня уже 4000 было, завтра возможно больше. И это чисто ориинальные посещения. Просмотры страниц в среднем в день составляли по 4000 страниц, сегодня - 30 тыс. страниц)
Второе - Сегодня было добавлено много материала (нод) на сайт, хотя и раньше добавления таких объемов происходили и все нормально.
Так что у меня подозрение на первое - большую посещаемость.
Причем продлится она продлится - это точно...
В связи с чем - нужна помощь! Сейчас висит на обслуживании сайт.
Может где в какие логи надо глянуть чтобы определить причину и выход - пишите - гляну...

Комментарии

Аватар пользователя gor gor 0

За решение проблем подобного рода, я обычно беру деньги.
И тут есть за что брать, простым наскоком - посмотрите тут, посмотрите там - такое не решается.

28 июля 2009 в 0:10

О еще - в phpmyadmin пишет внизу такое:

Раньше не наблюдалось...
Сайты, висящие на том же движке в мультисайтинге работают нормально...

28 июля 2009 в 0:10

gor, а так не было подобных случаев?
Почитал где-то что стоит почистить таблицы кэша, но надолго ли поможет?
Да и они все пустые, кроме cache_menu - в ней 4377 строк... хмм... не много?

28 июля 2009 в 0:13
Аватар пользователя gor gor 0

Nikolas wrote:
gor, а так не было подобных случаев?
Почитал где-то что стоит почистить таблицы кэша, но надолго ли поможет?
Да и они все пустые, кроме cache_menu - в ней 4377 строк... хмм... не много?

Было, и много раз, и во многих случаях причины разные, и не во всех случаях возможно простое решение.

28 июля 2009 в 0:15

"Freedom" wrote:
Возможно Мускуль отключен.

Нелогично - когда сайт вешаю на обслуживание сам ведь могу все нормально наблюдать... да и другие сайты на движке пашут...

28 июля 2009 в 0:15

"gor" wrote:
Было, и много раз, и во многих случаях причины разные, и не во всех случаях возможно простое решение.

Ну так мне хотябы из того что было...
Да - уже пробовал менять возможно число запросов - со 100 дефолтных до 250 - разницы не обнаружил - такой же провис...
Стоит таблицы cache перводить в InnoDB?

28 июля 2009 в 0:17

Может увеличить количество возможных соединений с субд. Хотя как мне думается Друпал через одно должен все слать

28 июля 2009 в 0:19

О еще - по отчетам глянул - много запросов поиска посетители вводили...
Может тоже как-нить поможет...
В таблице search_index 100573 строки...

28 июля 2009 в 0:22

"noway" wrote:
Может увеличить количество возможных соединений с субд. Хотя как мне думается Друпал через одно должен все слать

Как уже написал - увеличил с 100 до 250 - разницы по скорости подвисаний не заметил Sad
как можно посмотреть число пользователей в данный момент? Читал тут темку с залочеными пользователями что все забили...

28 июля 2009 в 0:24

"Zga" wrote:
Железо не справляется, похоже..

Я умал об этом...
В принципе - в самый пик в среднем производилось по одному запросу страницы в секунду, в то время если посмотреть в отчетах популярные страницы видно что среднее время генерации страницы колеблется от 0,5 секунды до 8 секунд.
В связи с чем еще вопрос - какое время генерации страницы нормальное?
Характеристики железа чуть позже напишу...

28 июля 2009 в 9:36

А можно ли сделать чтобы при большой загрузке сервера загружался не сайт, а сообщение что сервер перегружен...
То есть не дожидаться когда сервер повиснет напрочь, а заранее ослабить нагрузку на него таким образом...

28 июля 2009 в 11:03

Это можно сделать стандартными средствами drupal. Посмотри в сторону модуля throttle, который в ходит в состав drupal 6.

28 июля 2009 в 12:52

Действительно Smile
Спасибо, как-то забыл про него - по началу за ненадобностью отключил...
Возникает немного другой вопрос - как определить порог, при котором нагрузка на сервак становится критической вплоть до зависания?
Сейчас вот например на сайте 80 пользователей - полет нормальный Smile

28 июля 2009 в 14:36

Почитал...
Так понимаю этот модуль позволяет отключать модули при определенном пороге посещаемости сайта...
А вот так чтобы полностью не дать доступ, а только сообщение о перегруженности вывести - не нашел...
Или как-нить мудрено можно это сделать?

28 июля 2009 в 14:59

Ты знаешь, почему-то в голову лезет аналогия с 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 'Капец сайту Sad';
}
?>

Решение временное, но это всё же лучше, чем отображать ошибку базы данных.
Однако хочу предупредить, что код не тестировал, не могу гарантировать, что не случится такое, что вообще никто не сможет зайти на сайт. Поэтому в код встроил стоп-кран.

28 июля 2009 в 16:49

Спасибо, попробую, хотя сегодня не наблюдается никаких лагов...
Видать информация в сми о сайте - лучший вариант создания DDoS атаки Smile
Помню когда по орт сказали про какой-то сайт устройства на работу в вечерних новостях - так там сервак до ночи лежал Smile
А так кто не подскажет - какие нормальные параметры сервака для Drupal с сайтом посещаемости от 1000 до 5000 в день?
у нас сервак интел какой-то 2700 Mhz с гигом оперативы - этого достаточно? или нет? я вот думаю может пара добить...

28 июля 2009 в 21:02

Nikolas wrote:
Говорю же - сайт на нашем серваке личном...

тогда все намного проще Smile
в свое время так же погибали сайты (15шт), решилось долгим курением разных документов по оптимизации mysql и выделением под БД отдельного сервера (в моем случае это был 2GHz Core 2, 2GB RAM, винт к сожалению SATA Sad ) начало выдерживать до 15к уников.

10 августа 2009 в 19:40
Аватар пользователя Dan Dan 0

Это может быть связано с поисковиками - посмотрите кто приходит по логам и увеличте паузу между обработками страниц поисковиками.

10 августа 2009 в 21:25

если too many mysql connecitons то копать надо в сторону mysql. возможно висят какие-то persistent соединения, которые не закрываются, а может быть просто слишком малое число одновременных соединений к мускулу для данного пользователя

в любом случае первое что надо сделать - смотреть конфиги мускула и пользователя под которым коннектится друпал к базе

11 августа 2009 в 15:10