Magento Apache Конфигурация и проблемы с памятью

У меня есть установка Magento на VPS, которая вызывает у меня головную боль.

Этот конкретный VPS имеет разумную спецификацию - 2 ГБ памяти и 50 ГБ памяти. Он работает в одном домене, с одной установкой Magento - и больше ничего.

Около 5 месяцев назад у нас начались проблемы. Время от времени (примерно раз в 2 или 3 недели) происходит сбой VPS - все процессы останавливаются, и единственный способ перезапустить контейнер - через Virtuozzo.

Теперь, однако, его 2 или 3 раза в неделю. Мои VPS-хосты подтверждают, что я нарушаю ограничение памяти в 2 ГБ, и в этот момент все VPS-процессы уничтожаются, чтобы остановить его, приводя к остановке всего узла.

Я вообще не вносил в него никаких изменений в конфигурации - я запускал на нем New Relic некоторое время, но удалил его на тот случай, если это способствовало возникновению проблем. Я не вижу ничего в журналах, что указывает на проблему, и у нас нет запущенных заданий CRON в момент возникновения сбоев.

Сайт генерирует стабильный, но не огромный трафик (в среднем, как правило, менее 100 посещений в день)

Что конкретно я должен был сделать с конфигами Apache или PHP, чтобы помочь? Я не опытный администратор Apache, но знаю более чем достаточно для решения большинства проблем...

В противном случае, какие-либо другие идеи, которые могут помочь? Не могу себе позволить, чтобы этот сайт так много не работал.

4 ответа

Еще одна полезная вещь для настройки MAXCLIENTS - ApacheBuddy.

Смотрите https://github.com/gusmaskowitz/apachebuddy.pl

Это в основном просматривает статистику и ваши файлы конфигурации и дает вам рекомендации относительно того, каким должен быть ваш параметр MAXCLIENTS. Честно говоря, я никогда не могу позволить себе идти так низко, как они рекомендуют, но это, вероятно, "правильный" ответ.

Для использования / установки:

wget https://raw.github.com/gusmaskowitz/apachebuddy.pl/master/apachebuddy.pl

perl apachebuddy.pl

Полезные опции включают -p (для порта, если вы, например, используете лак) и -P (это заглавная буква "P"), чтобы также учитывать настройки памяти PHP.

Как правило, это простая математика о том, что установить в вашем конфигурационном файле apache. У вас есть 2 гигабайта оперативной памяти, и, вероятно, 1,5 из них могут быть использованы Apache.

так что ~ 1500 мегабайт. Убедитесь, что ваш файл.htaccess для magento нормальный.

php_value memory_limit 128M php_value max_execution_time 120

(Честно говоря, у нас установлено значение 512 м, потому что многие пользователи получали пустые страницы. Перейдите на страницу var/log/exception.log, чтобы узнать, так ли это)

В этом сценарии вы можете поддерживать только MaxClients 12! И, честно говоря, я думаю, что ограничение памяти по умолчанию в magento теперь составляет 256. Что означало бы maxclients 6! Я бы также предложил использовать меньше MaxRequestsPerChild. Возможно, до 100. Я бы увидел, что несколько процессов становятся все больше и больше. Дети Apache не освобождают память, пока они не будут уничтожены в моем опыте. Это то, что будет делать этот параметр. Возобновить дочерний процесс после 100 запросов.

У меня было много проблем с Apache. У нас есть серверы с 7 концертами, которые падают, как вы описали. Наш трафик намного больше, чем ваш, хотя.

Я только что видел, как вы запускали mysql на этой коробке. Нехорошо. Вы можете посмотреть запуск nginx с помощью php-fastcgi. Я получил это работает довольно хорошо, и он использует гораздо меньше памяти. Нашим единственным нарушителем было то, что у нас было расширение, использующее ионный куб, в котором мы нуждались, и я не мог с ним сотрудничать. (Я также использовал xcache вместо apc в качестве нашего кэша кода операции, потому что я слышал, что apc не будет делить память между процессами cgi)

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

По крайней мере, вам нужно реализовать какое-то решение для кэширования для magento.

Несколько вещей, о которых я могу думать прямо сейчас:

1) Убедитесь, что вы используете prefork MPM, а не рабочий MPM. 2) Отредактируйте apache2.conf (в Debian он находится в /etc/apache2/apache2.conf:

Убедитесь, что следующий конфиг есть (кажется, лучше для нас:)

Timeout 30
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 2

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
    StartServers          10
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   2000
</IfModule>

3) Посмотрите на использование Varnish в качестве механизма кэширования, который уменьшит нагрузку на Apache. 4) Установите APC/Memcache.

Вы можете попробовать apache-mpm-worker с php5-fpm. Я заметил существенную разницу, когда переключился со стандартной комбинации prefork/mod_php.

Несколько других предложений:

  1. Проверьте свою конфигурацию mysql, запустив скрипт tuning-primer.sh. Это обеспечит хорошую основу для того, чтобы убедиться, что ваш mysql настроен правильно и вы не тратите впустую память.

  2. Используете ли вы преимущества компонентов компиляции и кэширования Magento?

  3. Поскольку у вас есть только 2 ГБ оперативной памяти, убедитесь, что ваши Apache MaxClients находятся на разумном уровне. Начните с малого числа (например, 25) и следите за использованием ОЗУ, чтобы увидеть, можете ли вы его увеличить.

  4. 2 ГБ не так много памяти для сервера Magento с приличным объемом трафика. Вы смотрели на увеличение оперативной памяти или, возможно, заставить второй сервер использовать выделенный mysql для освобождения этой оперативной памяти для Apache?

  5. Вы проверяли, используя анализатор логов (например, webalizer, awstats и т. Д.) Или, возможно, даже просто расширенный модуль состояния Apache, что Apache является проблемой во время чрезмерного использования памяти?

Другие вопросы по тегам