Проверяем, что PHP работает как FastCGI, а не как CGI — на каждом хите новый процесс — это катастрофа
Хочу себе такие же кнопкиВведение
Вы — владелец или администратор сайта на Битриксе, и заметили, что при росте посещений страница начинает «тормозить». Одна из самых скрытых, но критически важных причин — неправильный режим запуска PHP. Если PHP работает в режиме CGI, то каждый запрос порождает новый процесс, а это почти гарантирует перегрузку сервера. В этом уроке мы разберём, как быстро проверить, что ваш PHP‑скрипт исполняется как FastCGI, а не как CGI, и почему это имеет значение для производительности вашего магазина.
1. Почему FastCGI — это не просто «быстрее» CGI
| Параметр | CGI | FastCGI |
|---|---|---|
| Создание процесса | Для каждого запроса создаётся новый процесс PHP. | Один (или несколько) процессов обслуживают множество запросов. |
| Затраты на запуск | Высокие (инициализация интерпретатора, загрузка модулей). | Низкие (процесс уже «разогрет»). |
| Память | При каждом запросе память выделяется заново, часто освобождается медленно. | Память переиспользуется, утечки легче контролировать. |
| Скорость | Медленнее в 2‑5 раз при высокой нагрузке. | Быстрее, особенно при большом числе одновременных запросов. |
| Типичные симптомы | Долгие «подключения», таймауты, рост нагрузки CPU → 100 % при небольшом трафике. | Стабильная работа, предсказуемый отклик. |
FastCGI — это «пул» процессов, который держится в памяти и принимает запросы через сокет (UNIX‑socket или TCP). В отличие от обычного CGI, где каждый запрос «перезапускает» интерпретатор, FastCGI экономит время на инициализацию и позволяет серверу обслуживать сотни запросов в секунду без лишних накладных расходов.
2. Как быстро проверить режим работы PHP
2.1. Через phpinfo()
-
Создайте файл
info.phpв корне сайта:<?php phpinfo(); ?> -
Откройте его в браузере:
https://yourdomain.com/info.php. -
Прокрутите страницу до секции Server API.
- Если указано CGI/FastCGI, значит уже работает FastCGI.
- Если указано CGI, то ваш сервер использует старый режим.
Важно: После проверки удалите файл
info.php, иначе он может раскрыть конфиденциальные данные.
2.2. Через командную строку (SSH)
Если у вас есть доступ к терминалу, выполните:
ps -ef | grep php
- FastCGI обычно показывает процессы
php-fpm(илиphp-cgiс параметром-b). - CGI будет выглядеть как отдельные
php-cgi‑процессы, каждый из которых привязан к конкретному запросу.
2.3. Через логи веб‑сервера
Для Apache (модуль mod_php vs mod_fcgid) проверьте конфигурацию:
# в файле .htaccess или httpd.conf
<IfModule mod_fcgid.c>
# FastCGI включён
</IfModule>
Для nginx ищите директиву fastcgi_pass в блоке location ~ \.php$.
3. Что делать, если обнаружен CGI‑режим
3.1. Переключаемся на PHP‑FPM (FastCGI Process Manager)
-
Установите пакет
php-fpm(в большинстве дистрибутивов Linux этоphp-fpmилиphp7.4-fpm). -
Запустите сервис:
systemctl start php-fpm systemctl enable php-fpm -
Настройте веб‑сервер:
-
nginx
location ~ \.php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } -
Apache (модуль
mod_fcgid)<FilesMatch "\.php$"> SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/" </FilesMatch>
-
-
Перезапустите веб‑сервер:
systemctl restart nginxилиsystemctl restart httpd.
3.2. Тюнинг параметров PHP‑FPM
| Параметр | Что делает | Рекомендация для небольших сайтов | Рекомендация для тяжёлых магазинов |
|---|---|---|---|
pm.max_children |
Максимальное количество дочерних процессов. | 5‑10 | 50‑200 |
pm.start_servers |
Сколько процессов запустить при старте. | 2‑3 | 10‑30 |
pm.min_spare_servers |
Минимальное количество «резервных» процессов. | 1‑2 | 5‑10 |
pm.max_spare_servers |
Максимальное количество «резервных» процессов. | 3‑5 | 20‑40 |
request_terminate_timeout |
Прерывать запросы, которые работают дольше указанного времени. | 30 сек | 60‑120 сек |
Эти параметры находятся в файле php-fpm.d/www.conf. Подбирайте их, исходя из объёма трафика и доступной RAM (каждый процесс потребляет ~30‑50 МБ).
4. Как понять, что процесс «каждого запроса» действительно убивает ваш сервер
4.1. Мониторинг в реальном времени
- htop или top покажут рост количества процессов
php-cgi. - iostat и vmstat отразят рост нагрузки на CPU и I/O.
Пример вывода htop при CGI‑режиме:
PID USER PRI NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 www 20 0 1.2G 65M 5M R 95.0 2.1 0:12.34 php-cgi
1235 www 20 0 1.2G 65M 5M R 90.0 2.1 0:11.90 php-cgi
...
Если видите десятки‑сотни таких процессов, значит каждый запрос действительно порождает новый процесс.
4.2. Тестовый нагрузочный скрипт
Создайте простой скрипт load.php:
<?php
$start = microtime(true);
usleep(50000); // 0.05 сек – имитируем небольшую работу
$time = microtime(true) - $start;
echo "Время выполнения: {$time}s";
?>
Запустите ab (ApacheBench) или wrk:
ab -n 1000 -c 50 http://yourdomain.com/load.php
Сравните Requests per second и Time per request в двух режимах: CGI vs FastCGI. В FastCGI вы увидите почти в 2‑3 раза лучшее значение.
5. Как избежать «катастрофы» в дальнейшем
- Автоматизировать проверку – добавить в CI‑pipeline скрипт, который парсит вывод
phpinfo()и падает сборку, еслиServer APIне равноCGI/FastCGI. - Регулярно обновлять PHP‑FPM и веб‑сервер, чтобы получать исправления багов и улучшения производительности.
- Контролировать количество процессов через
pm.max_children. Не ставьте слишком высокое значение, иначе RAM может закончиться, а процесс будет «подкачиваться» на диск. - Логировать ошибки
php-fpm(/var/log/php-fpm/error.log) и реагировать на сообщения о «slow requests» или «out of memory».
6. Практика для закрепления
- Проверьте текущий режим PHP на вашем сервере, используя
phpinfo(). Запишите, что отображается в поле Server API. - Сравните количество процессов
php-cgiв режиме CGI иphp-fpmв режиме FastCGI, запустивps -ef | grep phpдо и после переключения. Сколько процессов уменьшилось? - Настройте
pm.max_childrenв файлеwww.confтак, чтобы при 8 ГБ RAM ваш магазин мог обслуживать минимум 100 одновременных запросов без падения. Обоснуйте выбор значения. - Запустите нагрузочный тест
ab -n 500 -c 20 http://yourdomain.com/load.phpв обоих режимах и сравнитеRequests per second. Какой прирост вы получили? -
Создайте скрипт
check_fastcgi.sh, который выводит «OK» еслиServer API=CGI/FastCGI, иначе «FAIL». Пример вывода:#!/bin/bash if php -r 'echo php_sapi_name();' | grep -q 'cgi-fcgi'; then echo "OK: FastCGI" else echo "FAIL: CGI" fiСохраните скрипт, сделайте исполняемым и запустите. Что он выдал?
Заключение
Переход от CGI к FastCGI — это один из самых простых, но в то же время мощных шагов к ускорению сайта на Битриксе. Правильный режим работы PHP избавит вас от «катастрофы» с сотнями процессов, сэкономит ресурсы сервера и позволит обслуживать рост трафика без драматических падений производительности. Применяйте проверенные практики, регулярно мониторьте состояние процессов и настраивайте PHP‑FPM под ваш бизнес‑поток.
Если вы планируете масштабировать инфраструктуру, обратите внимание на надёжного провайдера VDS, который предлагает гибкие тарифы от 150 руб** для старта до Hi‑CPU для тяжёлых магазинов. Подробнее о тарифах можно узнать на VDSina.
Удачной оптимизации!
CamZamZam - онлайн фото с вебкамеры с эффектами
Cartoon Network: игры с персонажами
Чат рулетка в 2026: будущие функции
Эксперт по доменным стратегическим решениям
Хостинг для e-commerce проектов
Как играть в слоты
Как настроить CDN для сайта на хостинге Host.bg
Как настроить SSL-сертификат для сайта на Host.bg
Как оптимизировать производительность сайта с хостингом Host.bg
Как выбрать правильный хостинг для вашего сайта
Какие бывают ЛОР болезни у детей
Кассовые терминалы с оплатой картами
LOL куклы витрина детская
Лучшие видеорегистраторы для водителей
Онлайн QR-код сканер
Онлайн-связь
Оптимизация производительности баз данных на хостинге Host.bg
Основы настройки веб-хостинга: что вам нужно знать
Партнёрская программа без блога: как получать трафик из Telegram
Профессиональные хитрости для пользователей хостинга Host.bg
Регистрация ИП в Москве для иностранных граждан
Сравнение хостинга Host.bg с другими провайдерами
Субтитры — нет, уши — включены: погружение в английский за 5 минут
Сумки с бусинами
Техника для строительства загородных трасс
ТОП-10 VPS для разработчика: рейтинг серверов под рабочие задачи
WordPress блог для бизнеса