Уменьшение использования памяти Apache и среднего значения размера процесса

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

Я Я использую сервер Linux, используемая ОС - Ubuntu 14.04, все остальные конфигурации определены ниже. Этот веб-сервер используется для обслуживания приложений, созданных на PHP. Databse размещается через RDS. В среднем в часы пик на сервере происходит около 200 одновременных запросов, что приводит к 100% использованию памяти. Из-за этого приложение работает очень медленно или иногда отвечает с ошибкой. Поэтому я выполнил несколько шагов, чтобы решить эту проблему, которые я перечислил ниже, и попытался настроить apache и ограничить его для странных ситуаций.

ОС

NAME = "Ubuntu" VERSION = "14.04.5 LTS

Конфигурация сервера

ЦП: 8 ядер
Оперативная память: 15 ГБ
Поставщик оборудования: AWS
Тип экземпляра: c4.2xlarge

Параметры Apache.Conf (2.4)

Тайм-аут 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
HostnameLookups Off
Предупреждение LogLevel
AllowOverride all (для корневого каталога приложения)

MPM USED: prefork

MPM_PREFORK.CONF

StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 256
MaxConnectionsPerChild 200

Mods_Enabled

access_compat.load autoindex.load mime.load setenvif.load alias.conf deflate.conf mpm_prefork.conf socache_shmcb.load alias.load deflate.load mpm_prefork.load ssl.conf authn_core.load dir.confgotiation.conf ssl.load authn_file.load dir.loadgotiation.load status.conf authz_core.load env.load php5.conf status.load authz_host.load filter.load php5.load authz_user.load headers.load rewrite.load autoindex.conf mime.conf setenvif.conf

Средний размер процесса Apache

Используемая команда:

sudo ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): "x/1024; print "Average Process Size (MB): "x/((y-1)*1024)}' <br/>

Использование памяти Apache (МБ): 7227,66
Средний размер процесса (МБ): 314,246

Расчет MaxRequestWorkers

X = выделенная оперативная память, которую я хочу выделить для Apache (13 ГБ): 13312 МБ
Y = средний размер процесса, который я отслеживаю за последние 15 дней на сервере: 314,246
MaxRequestWorkers = X / Y = 40 приблизительно

ИСПОЛЬЗУЕМЫЙ MPM: предварительная вилка

Модифицированный MPM_PREFORK.CONF

StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 40
MaxConnectionsPerChild 8

Теперь, когда запускается apache, он запускает 5 процессов startservers, и каждый процесс startserver запускает 8 дочерних подключений, так что в общей сложности 40 одновременных подключений к серверу. MaxRequestWorkers ограничены 40, что не будет превышать 40 одновременных запросов, что предотвратит остановку в случае DOS, DDOS или защитит сервер от остановки, занимая максимальную оперативную память 13 ГБ, оставляя 2 ГБ ОЗУ свободными для сервера.
Я также не совсем понимаю параметр MaxConnectionsPerChild, пожалуйста, исправьте меня, если я использую его неправильно.

Параметры PHP.INI (php5)

OLD
output_buffering = 4096
max_execution_time = 60
memory_limit = -1
log_errors =

НОВОЕ
output_buffering = 4096
max_execution_time = 60
memory_limit = 64M
log_errors = On

ПРОБЛЕМЫ, КОТОРЫЕ МНЕ ВСЕ ЕЩЕ ОБРАЩАЮТСЯ

После изменения использования памяти mpm_prefork_conf снизилось использование памяти, но сервер отвечает многим клиентам с ошибкой 503 из-за параметра MaxRequestWorkers. Я попытался выяснить, почему каждый мой процесс apache использует 315 МБ ОЗУ, я искал в Google около 2 дней и не смог найти правильный путь для дальнейшего устранения неполадок. Итак, наконец, я разместил это здесь. У меня есть два варианта.

  1. Оптимизировать средний предел процесса apache и увеличить предел MaxRequestWorkers.

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

Пожалуйста, поделитесь со мной правильными предложениями, как я могу определить и уменьшить средний размер процесса apache с помощью php. Пожалуйста, только искренние ответы.

0
задан 19 January 2017 в 11:36
1 ответ

Я не думаю, что вы можете добиться чего-то большего, чем это, я бы выбрал путь к использованию php-fpm, тогда загрузка нединамического контента будет намного быстрее и потребует меньше памяти, Я нашел это руководство (digitalocean.com) , которое дает хорошие рекомендации. Вы можете проверить, как изменить время поддержки активности в apache, см. здесь

0
ответ дан 5 December 2019 в 08:43

Теги

Похожие вопросы