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

Главные вкладки

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

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

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 28 июля 2009 в 0:10

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Аватар пользователя Nikolas Nikolas 28 июля 2009 в 9:36

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

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

Аватар пользователя Nikolas Nikolas 28 июля 2009 в 11:03

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

Аватар пользователя v_20q v_20q 28 июля 2009 в 12:52

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

Аватар пользователя Nikolas Nikolas 28 июля 2009 в 14:36

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

Аватар пользователя Nikolas Nikolas 28 июля 2009 в 14:59

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

Аватар пользователя v_20q v_20q 28 июля 2009 в 16:49

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

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

Аватар пользователя Nikolas Nikolas 28 июля 2009 в 21:02

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

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

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

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

Аватар пользователя Dan Dan 10 августа 2009 в 21:25

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

Аватар пользователя serious.vip@drupal.org serious.vip@dru... 11 августа 2009 в 15:10

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

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