Параметр PHP memory_limit


Параметр PHP memory_limit определяет количество оперативной памяти, доступное скриптам. Неправильное значение может привести к ошибкам.



Как задать параметр PHP memory_limit


memory_limit задается в файле php.ini и ограничивает количество памяти для скриптов.

Путь к php.ini, который нужно редактировать всегда можно увидеть в файле phpinfo с кодом <?php phpinfo(); . Файл размещается в корне сайта.


Подробнее про то как посмотреть настройки PHP и найти где они заданы можно прочитать в материале по ссылке.



Как выбрать значение


Для небольших ресурсов оптимальными являются значения, измеряемые в сотнях мегабайт — 128256512.

Параметр PHP memory_limit



Для современных CMS таких как WordPress значений меньше 64 Мб обычно уже недостаточно даже при отсутствии каких-либо плагинов, расширяющих функционал.

Ошибка говорящая о нехватке памяти может возникнуть в том числе на этапе установки CMS.



Лимиты могут быть значительно больше, все зависит от того, какие скрипты запускаются. Значения можно кратно увеличивать, перезапускать веб-сервер и проверять выводится ли ошибка повторно.




Значение memory_limit может быть довольно большим, в том числе измеряться в Гигабайтах. Однако, устанавливать слишком большие значения также неверно.


Количество ресурсов для любой виртуальной машины или физического сервера ограничено.

Фиксирован ресурса процессора и RAM. Если всю память выделить для PHP скриптов при определенных условиях ее может не хватить для других процессов, что приведет к сбоям. OOM — типичная ситуация, от него может страдать любая служба, часто это сервер баз данных.



На что обратить внимание


Также важно помнить, что memory_limit это лимит процесса. Он не ограничивает потребление памяти для всех скриптов PHP в определенный момент времени. Если всего 8 Гб RAM, а значение memory_limit 4 Гб память легко может закончиться даже если другие сервисы её активно не используют.



Недостаточно высокое значение memory_limit будет вызывать ошибки 500 с записями типа 'Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 32 bytes)' в логах веб-сервера.



Если значение увеличивается раз за разом и ошибки продолжают возникать с новыми значениями в них — имеет место утечка памяти. Она возникает из-за плохо написанных скриптов.

В такой ситуации нужно включить логи ошибок PHP, они помогут выявить скрипты, которые требуют доработки.

Сказать спасибо
Categories: