Настройка процессов php-cgi под mod_fcgid
Если вы используете на своем сервере mod_fcgid, то может получиться так, что память куда пропала и все ушло в тормоза :-) и дело не в похмельном синдроме. Дело в том, что на сервере начинают плодиться php-cgi процессы в огромном количестве, каждый из них жрет оперативную память, которой начинает не хватать и Linux вынужден свопиться на диск :-(
Очевидным решением является жесткий тюнинг настроек FastCGI :-)
Все опции вписываем в fcgid.conf по адресу /etc/httpd/conf.d
Перво-наперво выставляем кол-во активных одновременно процессов (FcgidMaxProcesses), а дальше можно подобрать остальные парметры. К сожалению идеального конфига я не знаю, да и он зависит от кол-ва памяти на вашей машине
- # максимальное количество процессов, которые могут быть активны одновременно
- FcgidMaxProcesses 50
- # максимальное количество процессов в классе (сегменте), т.е. максимальное количество процессов которое разрешено порождать через один и тот же враппер (wrapper);
- FcgidMaxProcessesPerClass 10
- # минимальное количество процессов в классе
- FcgidMinProcessesPerClass 2
- # если число процессов превышает FcgidMinProcessesPerClass, то процесс, который не обрабатывает запросы за это время (сек), во время следующего сканирования процессов, интервал которого задается в директиве FcgidIdleScanInterval, будет отмечен для убивания;
- FcgidIdleTimeout 60
- FcgidIdleScanInterval 30
- # если процесс занят обработкой запросов дольше этого времени (сек), то во время следующего сканирования, интервал которого задается в FcgidBusyScanInterval, такой процесс будет отмечен для убивания;
- FcgidBusyTimeout 60
- FcgidBusyScanInterval 30
- # время (сек.) в течении которого модуль mod_fcgid будет пытаться выполнить скрипт
- FcgidIOTimeout 30
- # процесс завершится после того, как совершит указанное кол-во запросов
- FcgidMaxRequestsPerProcess 0
Указанная выше конфигурация успешно работает на сервере с 1 гигабайтом памяти, используя в сумме до половины памяти и почти не трогает Swap