Проверяем, что PHP работает как FastCGI, а не как CGI — на каждом хите новый процесс — это катастрофа
Дата публикации: 24.06.2026

Проверяем, что PHP работает как FastCGI, а не как CGI — на каждом хите новый процесс — это катастрофа

Хочу себе такие же кнопки
ccb9a536

Введение

Вы — владелец или администратор сайта на Битриксе, и заметили, что при росте посещений страница начинает «тормозить». Одна из самых скрытых, но критически важных причин — неправильный режим запуска 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()

  1. Создайте файл info.php в корне сайта:

    <?php phpinfo(); ?>
  2. Откройте его в браузере: https://yourdomain.com/info.php.

  3. Прокрутите страницу до секции 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)

  1. Установите пакет php-fpm (в большинстве дистрибутивов Linux это php-fpm или php7.4-fpm).

  2. Запустите сервис:

    systemctl start php-fpm
    systemctl enable php-fpm
  3. Настройте веб‑сервер:

    • 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>
  4. Перезапустите веб‑сервер: 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. Как избежать «катастрофы» в дальнейшем

  1. Автоматизировать проверку – добавить в CI‑pipeline скрипт, который парсит вывод phpinfo() и падает сборку, если Server API не равно CGI/FastCGI.
  2. Регулярно обновлять PHP‑FPM и веб‑сервер, чтобы получать исправления багов и улучшения производительности.
  3. Контролировать количество процессов через pm.max_children. Не ставьте слишком высокое значение, иначе RAM может закончиться, а процесс будет «подкачиваться» на диск.
  4. Логировать ошибки php-fpm (/var/log/php-fpm/error.log) и реагировать на сообщения о «slow requests» или «out of memory».

6. Практика для закрепления

  1. Проверьте текущий режим PHP на вашем сервере, используя phpinfo(). Запишите, что отображается в поле Server API.
  2. Сравните количество процессов php-cgi в режиме CGI и php-fpm в режиме FastCGI, запустив ps -ef | grep php до и после переключения. Сколько процессов уменьшилось?
  3. Настройте pm.max_children в файле www.conf так, чтобы при 8 ГБ RAM ваш магазин мог обслуживать минимум 100 одновременных запросов без падения. Обоснуйте выбор значения.
  4. Запустите нагрузочный тест ab -n 500 -c 20 http://yourdomain.com/load.php в обоих режимах и сравните Requests per second. Какой прирост вы получили?
  5. Создайте скрипт 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 блог для бизнеса
рейтинг хостингов 2026 Быстрые VDS серверы