Я запускаю apache с рабочим MPM и php с fastcgi.
Ниже приведены мои ограничения mpm:
StartServers 5
MinSpareThreads 5
MaxSpareThreads 10
ThreadLimit 64
ThreadsPerChild 10
MaxClients 10
MaxRequestsPerChild 2000
Я также установил свой php-cgi следующим образом:
PHP_FCGI_CHILDREN=5
PHP_FCGI_MAX_REQUESTS=500
Я заметил, что мой средний процесс php-cgi использует около 200+ МБ ОЗУ, даже после того, как они были запущены. Однако мой php memory_limit составляет всего 128 МБ.
Как это возможно и что я могу сделать, чтобы снизить потребление памяти php-cgi?
Предел памяти в PHP - это предел внутренней памяти, то есть объем, который движок позволяет пользовательскому скрипту выделять через свой частный распределитель. Но помимо этого есть память, которая выделяется движком для своих внутренних нужд, которая не всегда учитывается при подсчете лимита (часть есть, но не вся), память, выделяемая библиотеками и т. Д. Так что ожидайте реальной памяти использование должно быть немного больше, чем memory_limit
настройка.
Кроме того, как упоминалось выше, некоторые из цифр, сообщаемых инструментами, представляют собой память, выделенную для кода, стека, буферов ввода-вывода ОС, совместно используемой памяти между библиотеками и т. Д., Поэтому внимательно посмотрите, какой рисунок вы проверяете.
Есть случаи, когда PHP может превышать настроенный предел памяти (память распределяется непосредственно в расширениях), однако я подозреваю, что это может быть не так.
Я замечаю, что мой средний процесс php-cgi использует около 200+ МБ
Как вы это измерили? Большинство сегментов TXT будут совместно использоваться, поэтому фактическое использование памяти намного меньше, чем то, что вы увидите в файловой системе / proc или в ps / top. Хотя вы можете попробовать разобрать вывод lsof, на практике я считаю гораздо более разумным отступить немного назад и посмотреть количество выполняемых запросов (например, от количества подключенных сокетов) и сравнить это с сообщенной свободной памятью ( меньше буферов / кеша).