2016-12-07 5 views
0

Мы находимся на экземпляре AWS 16 ГБ, и я нахожу его очень медленным. Когда я бежалApache, используя всю память 16 ГБ, как ограничить его процессы и использование памяти?

ps -aux | grep apache 

Я могу видеть около 60+ процессов apache.

enter image description here

Когда я побежал

watch -n 1 "echo -n 'Apache Processes: ' && ps -C apache2 --no-headers | wc -l && free -m" 

Это показывает почти вся память используется апача.

enter image description here

Когда я побежал

curl -L http://apache2buddy.pl/ | perl 

, чтобы увидеть, как оптимизировать Apache, он предложил мне увеличить число MaxRequestWorkers, так что я сделал это 550. Я также изменил MaxConnectionsPerChild от 0 (без ограничений) в 10000.

Вот мой файл /etc/apache2/mods-enabled/mpm_prefork.conf

<IfModule mpm_prefork_module> 
     StartServers    5 
     MinSpareServers   5 
     MaxSpareServers   10 
     MaxRequestWorkers  550 
     MaxConnectionsPerChild 10000 
</IfModule> 

Можете ли вы рассказать мне, как мы можем оптимизировать использование памяти apache, чтобы он не повредил весь сайт?

ответ

1

У меня была аналогичная проблема с экземпляром в EC2, и вот что я сделал, и хотел бы предложить:

  1. Если вы используете PreFork, убедитесь, что модуль загружен, набрав эти две команды apache2 -l и sudo apache2 -M Если вы можете увидеть модуль предпродажной программы, загруженный в результаты любой из этих двух команд, то до следующего шага. В противном случае обязательно загрузите его, иначе вы измените конфигурации для ничего.

  2. Выполнить эту команду, чтобы найти среднюю память каждый процесс apache2 использует ps aux | grep 'apache2' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg)/NR;} END {print avg " MB";}' вызов, который ценят x

  3. Перезапустите сервер Apache с помощью sudo service apache2 restart и принять к сведению, сколько свободной памяти у вас есть. То, что я сделал, это вычесть дополнительную подушку 200MB-500MB из этой свободной памяти, которая будет использоваться позже. Позвоните, что ценностные y

  4. Разделите значение свободной памяти y над количеством памяти, используемой в процессе x и это было бы значение MaxRequestWorkers = y/x

  5. Что касается стоимости MaxConnectionsPerChild, то вы можете настроить его до вы получаете правильную конфигурацию. Это вы делаете его слишком большим, тогда процесс будет продолжать использовать все больше и больше памяти перед тем, как быть убитым. Если вы сделаете его слишком маленьким, тогда процессы будут слишком быстро умирать, и в вашей системе будут накладные расходы. Я обычно держу его где-то между 4000 и 10000.

  6. Некоторые из этих шагов были взяты из принятого ответа по следующей ссылке: StackExchange: httpd memory usage, где одно решение также предложило отключить некоторые из модулей, если они вам не нужны.

Я предлагаю вам сначала выполнить шаги 1-5 и посмотреть, решит ли это вашу проблему!

Удачи вам!

+0

Для "apache2 -l", я вижу только эти модули - скомпилированных модулей: core.c mod_so.c mod_watchdog.c http_core.c mod_log_config.c mod_logio.c mod_version. c mod_unixd.c Я не вижу в предпродаже, как его включить? Я удивлен, потому что он не показывает ни один из предков и рабочий мод? – iCyborg

+0

Для меня я тоже этого не видел, но я видел, как он загружался с помощью 'sudo apache2 -M'. Если вы не можете его загрузить, вы можете сделать это автоматически, используя 'sudo a2enmod mpm_prefork', или вы можете сделать это вручную, что может быть длительным процессом, сначала найдя файл **. Conf **, а затем раскомментируйте строку, которая загружает модуль предпродак. Удачи! – Mohamed