Прежде чем применять настройки - внимательно читаем. От этого зависит работоспособность системы |
| Для ускорения работы системы, предусмотрено создание пулов для FCGI |
Сейчас веб-интерфейс работает так:
nginx -> fcgiwrap -> НОВЫЙ perl-процесс на КАЖДЫЙ HTTP-запрос. |
Каждый такой процесс заново:
Между запросами НИЧЕГО не сохраняется. Каждый клик = «холодный старт». Это ~0.2 с чистой компиляции + загрузка модулей на КАЖДЫЙ клик.
ЧТО МЫ НЕ МЕНЯЕМ (важно!):
(модель «пул воркеров», как fcgiwrap -c N)
Родительский процесс (демон acp-fcgi-index):
Воркер (дочерний процесс):
ИТОГ: компиляция ~45 модулей и локализации происходит ОДИН РАЗ при старте демона, а не на каждый клик. Клик = только выполнение логики. Параллелизм — реальный (N одновременных запросов).
ПОЧЕМУ НЕ «fork на каждый запрос» ВМЕСТО пула: объект FCGI::Request ОДИН на процесс и хранит состояние текущего запроса. Если родитель вызовет Accept() повторно, пока ребёнок пишет ответ через тот же $request, состояние перезапишется и ответ «развалится» (nginx отдаст 502). Поэтому параллелизм реализуется через НЕСКОЛЬКО независимых воркеров, каждый со СВОИМ $request (так делает Plack::Handler::FCGI через FCGI::ProcManager). А внутри воркера fork на каждый запрос нужен для ЧИСТОГО пространства имён.
Реализовано так, что НИ У ОДНОГО клиента ничего не сломается:
-> fcgi_runner.pl тихо откатывается в обычный CGI-режим. -> Работает как раньше (одноразовый запуск). Ничего не ломается. |
-> Apache просто НЕ использует fcgi_runner.pl и systemd-юниты. -> Работает по-старому через свой CGI-обработчик. Ничего не ломается. |
-> Раннер определяет это по переменной GATEWAY_INTERFACE. -> Откатывается в обычный CGI-режим. Ничего не ломается. |
-> Полный эффект ускорения. |
ВЫВОД: наличие/отсутствие FCGI и тип веб-сервера НЕ ломают систему. Файл fcgi_runner.pl можно безопасно использовать — он безвреден для тех, кто его не использует.
/usr/acp/misc/install_fcgi_pool.sh |
Скрипт:
Ожидаемый вывод в конце:
[OK] Сокет создан: /run/acp-fcgi-index/index.sock [OK] Сокет создан: /run/acp-fcgi-admin/index.sock === УСТАНОВКА ЗАВЕРШЕНА === |
Проверка
systemctl status acp-fcgi-index systemctl status acp-fcgi-admin journalctl -u acp-fcgi-index -n 30 |
Сервисы должны быть active (running), сокеты — существовать.
journalctl -u acp-fcgi-index -n 50 journalctl -u acp-fcgi-admin -n 50 |
Не должно быть ошибок.