Ограничение памяти PHP - PullRequest
       3

Ограничение памяти PHP

4 голосов
/ 17 августа 2010

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

Означает ли это, если я установил максимум в64 МБ и моему сценарию нужны только 12 МБ, чтобы он использовал все 64 МБ только потому, что это разрешено?

Я спрашиваю, потому что заметил, что некоторые из моих сценариев используют 12 МБ (обнаружен с помощью get_memory_usage), но httpdсам процесс приближается к отметке 64 МБ, хотя это единственный запущенный скрипт!Кстати, у меня нет проблемы утечки памяти.

Это также тот случай, когда другой процесс, который он порождает, т.е. CMD будет добавлен к общему использованию памяти процессами httpd?

Спасибо всем за любыепомогите мне разобраться с этим.

1 Ответ

5 голосов
/ 17 августа 2010

PHP memory_limit учитывает только память, которая обрабатывается менеджером памяти Zend Engine (см. Zend / zend_alloc.c ), и этот менеджер не распределяет объем, установленный через memory_limit, «превентивно» (хотя он выделяет новую память в сегментах).Не все "внутри" PHP обрабатывается менеджером памяти, но большинство так и есть.Другие процессы, созданные вашим экземпляром php, не «наследуют» менеджер памяти.Поэтому их потребление памяти не учитывается в memory_limit.

То, что вы видели в диспетчере задач, - это (наиболее вероятно) рабочий набор процесса httpd.Это включает память, выделенную php (обрабатывается менеджером памяти или нет), если она установлена ​​как модуль apache.Но также и все остальное из httpd, которое в данный момент находится в физической памяти.Но он не включает объем памяти, выделенный порожденными процессами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...