Непонятные торможения сервера.

izx

Новичок
Непонятные торможения сервера.

Есть мощный 2-х процессорный сервер. Процессоры Интел 5140.
Памяти 8 ГБ
4 винчестера SAS на 15 000 об/мин в 10 рейде.
Система Linux ubuntu 2.6.20
Нормально работал пол года.
Держал нагрузку до 2 миллионов тяжелых PHP запросов в сутки.
В каждом PHP запросе 5-10 обращений к MySQL на этом же сервере.
Уже 2 дня не понятные глюки.
Сайты тормозят и не открываются.
При обращении к MySQL из PHP появляется сообщение.
«1040: Too many connections»

Команда vmstat выдает
http://content.foto.mail.ru/bk/xeniux/1/s-4.jpg
Все ресурсы процессора тратятся на
wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.

Команда top выдает
http://content.foto.mail.ru/bk/xeniux/1/s-5.jpg
Основная часть ресурсов процессора тратится на mysqld

Причем после перезагрузки сервера первые 2-3 минуты сайты открываются моментально. Но через 2-3 минуьы начинаются тормоза.

В чем может быть дело?
 

Апокалипсис

тех дир matras.ru
варианты: ддос, фрагментация таблиц,
насчёт too many connections - в поиск гугл и этот форум.
Можно увеличить кол - во обращений к БД.
 

Alexandre

PHPПенсионер
552 спящих процесса - это не нормально...
Мускуль загрузка 106%...
перегрузи мускуль, хотя это временная мера.

-~{}~ 02.01.08 18:06:

1040: Too many connections
а что - используется pconnect?
может стоит заменить на простую коннекцию?
 

izx

Новичок
pconnect - не используется.
Используется команда
mysql_connect(':/tmp/mysql.sock','login','pas');

Что интересно, сегодня днем сервер и сайты пару часов работали нормально.
Все просто летало.
А сейчас снова тормоза вернулись.
По логам апача определить ДДОС сложно, так как логии его в сутки в нормальном режиме около 4 Гб в сутки.
Что посоветуете?
 

ys

отодвинутый новичок
>Что посоветуете?

1. Главное - Проанализировать логи.

ngnix как frontend
Посмотреть в mysql что там висит в периоды пиковых нагрузок.

>Основная часть ресурсов процессора тратится на mysqld

1. Предположу, что тягается редкоизменяемый контент. Если да, кешируем и отдаем статиком.
2. Индексы там, где они не нужны.

-~{}~ 02.01.08 23:45:

+ посмотреть smart info дисков. Я не доверяю SAS, это из опыта....
 

izx

Новичок
>Посмотреть в mysql что там висит в периоды пиковых нагрузок.

Как это сделать?
Какой утилитой?
 

izx

Новичок
Всем спасибо за помощь.
Вроде бы нашел причину тормозов.
Как раз 2 дня назад дорабатывал один из сайтов.
И один запрос сделал не оптимальным и он тормозил весь сервер.

Еще вопрос по этой фразе?
"Предположу, что тягается редкоизменяемый контент. Если да, кешируем и отдаем статиком."

Спасибо за подсказку, как раз это фраза и помогла мне найти причину тормозов.

Кто как реализует кэшироваие?
Я это делаю так. Редко изменяемые страницы формирую в виде файлов раз в час.
А затем их вывожу командой PHP readfile(). Если еще другие варианты делать кэширование?
 

ys

отодвинутый новичок
>Я это делаю так. Редко изменяемые страницы формирую в виде файлов раз в час.

Проще кеш делать по факту изменения контекста.

> А затем их вывожу командой PHP readfile().
> Если еще другие варианты делать кэширование?

Чем include() не угодил?
Проще вообще делать html файлы и не дергать php, если, конечно, в файле нет кода "для исполнения".
 

izx

Новичок
>Чем include() не угодил?

readfile() - просто выводит файл не зависимо от содержимого.
include() - проверяеет есть ли в файле PHP скрипты и выполняет их.

Так что readfile работает быстрее чем include
 

ys

отодвинутый новичок
>readfile() - просто выводит файл не зависимо от содержимого.
> include() - проверяеет есть ли в файле PHP скрипты и выполняет их

Из этого вытекает, что Вам просто надо сделать html (или какой другой) статический файл и напрямую его отдавать, не используя всяческие php (ибо исполнять то ничего не надо) :).
На крайний случай, можно при помощи mod_rewrite "отрехтовать" URI до удобоваримого вида, но он тоже любит CPU немного хапнуть, т.к. использует regexp libs.
 

Krishna

Продался Java
Спасибо за подсказку, как раз это фраза и помогла мне найти причину тормозов.

Кто как реализует кэшироваие?
Прежде всего, стоит убедиться, что включен собственный кеш запросов mysql.
 

ys

отодвинутый новичок
Krishna

>Прежде всего, стоит убедиться, что включен собственный кеш запросов mysql.

Если быть более точным, "стоит убедиться, что включение собственного кеша запросов mysql нужно в данной конкретной ситуации".
 

Krishna

Продался Java
ys
Это верно в теории, но на практике проще установить экспериментально - помогает он или нет
 

Alexandre

PHPПенсионер
Что посоветуете?
DDOS оперделяется netstat
DDOS- могут вообще слать TCP пакеты на любой порт, шлют кучу ask, засерая тем самым канал и занимая главный сервер. так что DDOS по логам апача не определишь ни как.
 
Сверху