Конфигурация Apache и конфликт mysql max_used_connection в Ubuntu 11.10
У меня есть серьезные проблемы с моим рабочим сервером под управлением Ubuntu 11.10 с 48 ГБ ОЗУ. Настройка моего веб-сервера (Apache 2.1) настроена на использование приблизительно 18 ГБ ОЗУ. Я пытался вычислить это значение, установив
- max_clients 800
с каждым дочерним процессом, принимающим почти 23 МБ ОЗУ
- max_spare_servers 200
- KeepAlive on
- keepalivetimeout 3
Apache MPM настроен на модуль prefork
Дополнительно мы используем
- php 5.3.2
- PDO для подключения к базе данных
Я сделал аналогичные изменения на моем сервере MySQL (v5.1), изменив max_used_connections на 800 с
- key_buffer to 4Gb (Myisam как движок по умолчанию с 3 таблицами innodb)
- key_buffer_size + (read_buffer_size + sort_buffer_size) * max_connections = 5.4Gb
Теперь max_used_connection быстро увеличивается, и через пару часов он остановился на 595 и снова поднялся до своего максимального значения 800. Я даже попытался изменить конфигурацию mysql по умолчанию, но все еще без изменений.
По какой-то причине переход к настройке Apache по умолчанию решает проблему, теперь max_used_connections стабильно около 57.
У кого-нибудь есть представление об этом поведении? Может ли конфигурация Apache влиять на производительность Mysql?
1 ответ
Это ужасный способ запустить apache на большом сервере.
Пожалуйста, рассмотрите возможность запуска рабочего MPM (облегченная модель многопоточности) и прокси-динамические запросы (PHP) к бэкэнду fastCGI через официальный модуль apache mod_fcgid.
Также убедитесь, что вы установили статическое число соединений PHP -> mysqli и повторно используете этот пул.
Вы можете тривиально поддерживать 5000 одновременных клиентов с помощью описанной выше настройки.