Оптимизация веб-серверов приложений на основе nginx+php-fpm

В данной статье я приведу примеры оптимизации сервера приложений под linux. Важной целью для улучшения производительности является правка файла настроек linux. Нас интересует настройки стека tcp/ip. Файл находится по пути /etc/sysctl.conf.
Замените содержимое файла на

Далее в файлах upstream php-fpm (/etc/php-fpm.d/*) предлагаются на выбор статический и динамический режимы работы. Для экономии памяти лучше выбирать динамический. Также нужно рассчитать количество процессов php-fpm на основе количества оперативной памяти Вашего сервера. Делается это по формуле

(«Общее количество памяти» — «Память необходимых сторонних процессов»)/»Среднее количество памяти для одного процесса php-fpm»
Память необходимых сторонних процессов — это количество памяти расходуемое на работу без запуска php-fpm (память на работу nginx и.т.д.). Обычно это не более 100-200Мб.

Среднее количество памяти для одного процесса php-fpm — вычисляется как среднее от пикового значения при работе php-fpm и количества памяти при холостом ходе php-fpm процесса. Обычно это не более 50-120 МБ.

Таким образом для сервера с 2Гб оперативной памяти количество процессов равно (2048М — 200Мб)/80Мб = 23,1 Поэтому в конфиге укажем pm.max_children 20 процессов.

Далее необходимо выбрать минимальное и максимальное количество процессов на холостом ходу. Лучше выбирать 1/4 как минимальное количество pm.min_spare_servers = 5. Максимальное значнеие — половина от общего количества процессов. Таким образом для сервера с 2 Гб памяти лучше указать pm.max_spare_servers = 10. Начальное количество процессов лучше выбирать равным максимальному количеству. Таким образом pm.start_servers = 10. Такие настройки помогут компенсировать время на разворачивание процессов при перезагрузке сервера. Если происходят зависания при долгой работе, то необходимо pm.min_spare_servers, pm.max_spare_servers, pm.start_servers пропорционально снизить до 1/6, 1/10, 1/14, 1/20 (подобрать значения) от общего количества процессов. Значение количества обработанных запросов перед обновлением процесса лучше выяснять на опыте. Но предподчтительнее использовать настройку pm.max_requests = 500

Общий вид конфига

 

Добавить комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.