Помогите настроить связку Mysql Apache Nginx

123 4
Metal Messiah
На сайте с 01.08.2010
Offline
163
3079

Доброго времени суток!

Недавно взял VPS под один проект. Характеристики: 400 MB, 750 Mhz

Предустановлена конфигурация

Debian Linux 2.6.32-308.8.2.el5.028stab101.1 x86_64 GNU/Linux

Nginx мордой на статический контент, Apache в бекенде, Mysql

Сайт перенес, радуюсь хорошей скорости. Дальше перекинул сюда же одну статистику (база из нескольких таблиц, php скрипт API для записи и php для отображения суммарной информации) - 2 недели полет нормальный.

На днях количество запросов к статистике выросло в несколько раз, сервер начал задыхаться. Смотрю что за - вижу что апачи съели всю память. Пытался ограничить их количество как всегда делал когда без nginx - это ни к чему не приводило, их все равно пару десятков было. В конце концов отключил Keep-Alive.

Результат: все запросы к динамике стали дольше обрабатываться, статика чуть дольше. При пиках нагрузки на статистику (запись в БД) все равно все задыхается, статика отдается медленно, динамика никак. Теперь всегда есть 80-100 Мб свободной ОЗУ, но проблема видимо в БД:

mysql не успевает отрабатывать запросы, процессы php и apache ждут ответа от БД, соответственно свободных апачей нет и nginx тоже не отдает контент.

Запросов всего порядка 1000 в час к php статистики, к самому сайту 3000 уников в сутки.

логи хостов
mod_fcgid: read data timeout in 40 sec
Premature end of script headers: index.php
логи nginx
upstream timed out (110: connection timed out) while reading response header from upstream
connection reset by peer --||--
логи apache
mod_fcgid: process *** graceful kill fail, sending SIGKILL

Я так понимаю достаточно каким-то образом увеличить производительность MySQL и проблема уйдет, тогда и апачи в памяти висеть не будут. Таблицы MyIsam.

Что посоветуете?

txt my.cnf.txt
anonymous, думай что говоришь и не забывай подписать отзыв :)
Andreyka
На сайте с 19.02.2005
Offline
822
#1

Настройте кеширование

Я об этом писал подробную статью

Не стоит плодить сущности без необходимости
Metal Messiah
На сайте с 01.08.2010
Offline
163
#2

Спасибо, но боюсь что не поможет.

1. Сайт берет 10% от всей нагрузки, скрипт статы - 90%. Даже если я закеширую сайт...

2. Стату кешировать никак нельзя, т.к. каждый запрос заканчивается записью строки в таблицу БД и возвратом некоторых данных запрашивающему.

Вообще странно что max_connections=100 закомментировано, т.е. не ограничено, апачей штук 15 всего без KeepAlive, т.е. одновременно обрабатывается с 2 десятка запросов, а база тормозит и не отвечает вовремя на половину.

P
На сайте с 16.03.2009
Offline
144
#3
Metal_Messiah:

Вообще странно что max_connections=100 закомментировано, т.е. не ограничено

Если не задано, значит mysql будет считать, что равно 150

Характеристики: 400 MB, 750 Mhz

Очень слабый конфиг VPS.

Metal Messiah
На сайте с 01.08.2010
Offline
163
#4

У меня та же стата + игровой сервер + еще всякая мелочевка висела на сервере от Eomy.net с 384 RAM+96 Swap, потом запустил 2й игровой сервер там же памяти перестало хватать (100-150 Мб на процесс) и апгрейдил тариф до 512+128 Мб. Там проц 2500 но при превыщении 800. Что можно выжать из P3-600 Мгц я сам знаю т.к. дома такой сервер был под виндой. К чему я это...

К тому что все работало нормально. Пики нагрузки были но это сказывалось только на скорости отдачи страниц, но они отдавались в разумное время. Apache в конфиге до 5 серверов с Keep-Alive + Mysql. Без nginx. Просто месяц назад у EOMY на серве слетел винт и пока решался вопрос с восстановлением данных пришлось перенести и уже думал насовсем.

на этом оффтоп заканчивается.

ОК, 150 коннектов. У меня все равно столько нет - вот скрин top'а во время ступора. 10 php, 11 apache. 10 одновременных подключений к БД...

gif btop.gif
P
На сайте с 16.03.2009
Offline
144
#5

Количество коннектов увеличивается - когда их кто-нибудь откроет, например сайт. Воспользуйтесь mysqltuner.

Лучше бы взяли себе хорошую впску, с оперативкой от 1гб+ и cpu 3000+

Чем ютиться на этой.

Metal Messiah
На сайте с 01.08.2010
Offline
163
#6

Лучше это когда проект будет приносить доходов на 2 таких VPSки. ЗА совет конечно спасибо, но мне интересно как выжать максимум из существующего железа. Хостер мне тоже предложил увеличить тариф, но это я всегда успею.

На крайняк у меня есть решение - плагин, который делает GET запрос к веб серверу, изменить на плагин, который будет делать тот же коннект на демон, и написать демон который будет принимать конненты по TCP на определенный порт и делать всю ту же работу включая общение с базой, таким образом освобождается куча памяти на апачи и из этой цепочки полностью выпадает пхп. Но это решение тоже упрется в какой-то невидимый лимит mysql сервера, так что пока это только идея. Все равно с MySQL надо что-то делать!

P
На сайте с 16.03.2009
Offline
144
#7
Metal_Messiah:
Лучше это когда проект будет приносить доходов на 2 таких VPSки. ЗА совет конечно спасибо, но мне интересно как выжать максимум из существующего железа. Хостер мне тоже предложил увеличить тариф, но это я всегда успею.

На крайняк у меня есть решение - плагин, который делает GET запрос к веб серверу, изменить на плагин, который будет делать тот же коннект на демон, и написать демон который будет принимать конненты по TCP на определенный порт и делать всю ту же работу включая общение с базой, таким образом освобождается куча памяти на апачи и из этой цепочки полностью выпадает пхп. Но это решение тоже упрется в какой-то невидимый лимит mysql сервера, так что пока это только идея. Все равно с MySQL надо что-то делать!

Поставить: mysql, nginx + php5-fpm

Настроить конфиги на минимальное потребление памяти.

Den73
На сайте с 26.06.2010
Offline
523
#8

это не дело, зачем нужен такой дохлый сервер под сайты (что бы угробить их?), если нет денег на нормальный сервер купите шаред за 100р он будет куда лучше во всех отношениях.

Оптимизайка
На сайте с 11.03.2012
Offline
396
#9
Metal_Messiah:
мне интересно как выжать максимум из существующего железа

1. Установить 32-битную ОС

2. Отказаться от apache в пользу php5-fpm

3. Оптимизировать запросы MySQL

4. Кэшировать

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
Andreyka
На сайте с 19.02.2005
Offline
822
#10
Metal_Messiah:
Спасибо, но боюсь что не поможет.

1. Сайт берет 10% от всей нагрузки, скрипт статы - 90%. Даже если я закеширую сайт...
2. Стату кешировать никак нельзя, т.к. каждый запрос заканчивается записью строки в таблицу БД и возвратом некоторых данных запрашивающему.

Так не используйте mysql для статистики - для этого есть мемкеш

А из него раз в час пакетным инсертом скидывайте в мискуль

123 4

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий