Каталог статей
Количество одновременно работающих пользователей, которое может обработать сервер, зависит не от количества ядер, а от объема памяти, потребляемого каждым процессом.
Это заявление может прозвучать как провокация, но это самый реальный и болезненный опыт в сфере эксплуатации и технического обслуживания.
Почему память является ключевым узким местом?
Многие, увидев VPS с 8-ядерным процессором и 24 ГБ оперативной памяти, подсознательно думают, что на нём легко можно запустить сотни процессов PHP-FPM.
Однако в действительности объем памяти, используемой одним PHP-процессом для RSS, часто достигает 200 МБ.
Это результат, полученный в ходе реального тестирования через командную строку:
ps --no-headers -o rss -p $(pgrep php-fpm) | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'
В сложной структуре HestiaCP и многоплагиновой среде, особенно без оптимизации OPcache, 200 МБ — это норма.
Это означает, что именно объем памяти, а не процессор, является жестким ограничением, определяющим максимальную параллельность выполнения.

Рекомендуемый конфигурационный файл (php-fpm.conf)
pm = dynamic
pm.max_children = 80
pm.start_servers = 16
pm.min_spare_servers = 8
pm.max_spare_servers = 24
pm.max_requests = 500
pm.process_idle_timeout = 10s
request_terminate_timeout = 60s
Логика расчета параметров и основа настройки
| Параметры конфигурации | Установка значения | Основные расчеты и основы настройки |
|---|---|---|
| pm | dynamic | Динамический режим позволяет гибко добавлять или удалять процессы в зависимости от требований к параллельному выполнению, обеспечивая баланс между скоростью отклика и использованием памяти. |
| pm.max_children | 80 | Общий объем памяти составляет 24 ГБ, за вычетом памяти ядра системы и... MySQL/RedisПосле Nginx для PHP остаётся примерно 16 ГБ памяти.16,384 MB / 200 MB ≈ 81.9Установка значения 80 может полностью исключить OOM (Out of Memory) при высокой параллельности выполнения. |
| pm.start_servers | 16 | Предварительный нагрев при запуске устанавливается на уровне, вдвое превышающем количество ядер ЦП (8 ядер × 2 = 16), чтобы гарантировать, что служба сможет мгновенно обрабатывать базовые параллельные задачи после перезапуска. |
| pm.min_spare_servers | 8 | Установите количество ядер ЦП на 8, чтобы гарантировать обработку новых запросов в любое время даже в периоды низкой нагрузки. |
| pm.max_spare_servers | 24 | Установите значение, равное в 3 раза большему числу ядер ЦП (8 ядер × 3 = 24), чтобы сохранить умеренное количество процессов после снижения нагрузки и справиться с небольшими колебаниями. |
| pm.max_requests | 500 | Если один процесс достигает большого базового объема в 200 МБ, уменьшение количества запросов до 500 приведет к уничтожению и повторному созданию процесса, что позволит быстрее устранить неявные утечки памяти. |
| pm.process_idle_timeout | 10s | Вне min_spare_servers Бездействующие процессы автоматически освобождаются и возвращаются в системную память через 10 секунд после начала отсутствия запросов. |
Основные вспомогательные настройки и рекомендации по оптимизации
1. Механизм предотвращения похмелья с таймаутом
request_terminate_timeout = 60s Это ключ.
Она может принудительно завершать процессы, зависшие из-за взаимоблокировки базы данных или блокировки со стороны сторонних API.
Тем временем, Nginx fastcgi_read_timeout Его необходимо удерживать не менее 60 секунд, иначе клиент получит его преждевременно. 504 Gateway Timeout.
2. Стратегии преодоления проблем с памятью
Ограничение в 80 одновременно обрабатываемых процессов означает, что в условиях экстремальной параллельности система может обрабатывать максимум 80 динамических HTTP-запросов одновременно.
Если вы хотите еще больше повысить производительность, следует сосредоточиться на сокращении использования памяти каждым процессом.
- Включить OPcache: 在
php.iniСредняя конфигурацияopcache.enable=1Иopcache.memory_consumption=256Кэширование байт-кода может сократить объем памяти, используемой одним процессом, с 200 МБ до 60–100 МБ. - Разумный контроль memory_limit:будем
php.iniсреднийmemory_limitограничено в128M或256MДля предотвращения появления отдельных некорректных скриптов无限Это потребляет много памяти.
Как только объем памяти, используемой отдельным процессом, снизится до 100 МБ...pm.max_children Его можно безопасно обновить до 150 Кроме того, возможности параллельной обработки данных увеличились почти вдвое.
Приведены авторитетные точки зрения.
В соответствии с рекомендациями, изложенными в официальной документации Nginx :
«Для предотвращения исчерпания ресурсов в приложениях FastCGI всегда следует использовать директивы тайм-аута».
(Источник: документация Nginx)
В официальном руководстве по PHP четко указано:
"pm.max_children определяет максимальное количество создаваемых дочерних процессов. Это наиболее важная директива."
(Источник: документация PHP-FPM)
Эти авторитетные взгляды полностью соответствуют нашей практике, доказывая, что логика оптимизации основана не только на опыте, но и на стандартизированных передовых методах.
Заключение: Мои взгляды и ключевые цитаты
В сценариях с высокой степенью параллелизма центральный процессор выступает в роли двигателя, память — в роли топливного бака, а PHP-FPM — в роли диспетчера автопарка.
Независимо от мощности двигателя, если топливного бака недостаточно, колонна далеко не проедет.
Настоящие эксперты не завышают параметры вслепую, а точно рассчитывают объем памяти, используемой каждым процессом, чтобы избежать как неэффективного использования памяти, так и переполнения.
Суть оптимизации заключается в поиске оптимального баланса при ограниченных ресурсах.
Это не просто технология, но и философия.
Поэтому перестаньте верить, что «количество ядер определяет всё». На самом деле, предел параллелизма определяется вашим контролем над памятью.
Примите меры и оптимизируйте свой VPS до предела, максимально используя каждый свободный объем памяти.
Надеюсь, статья "8-ядерный VPS с 24 ГБ оперативной памяти испытывает нехватку памяти? Экстремальная настройка пула процессов PHP-FPM под HestiaCP", опубликованная в блоге Чен Вэйляна ( https://www.chenweiliang.com/ ), окажется для вас полезной.
Не стесняйтесь делиться ссылкой на эту статью: https://www.chenweiliang.com/cwl-34509.html
