2016-02-19 10 views
4

Некоторые страницы нашего сайта поражают ограничение памяти PHP, которое в настоящее время установлено на 128 МБ. При запросе поднять лимит памяти до 256 МБ, нам сказали, инженер в нашей хостинговой компании, что:Предоставляет ли PHP memory_limit предварительную выделение памяти для PHP

На нашем сервере «средний запрос требует менее 64 МБ оперативной памяти»

и

" смещение памяти до 256 Мбайт, по существу, создает среднее распределение 192 МБ памяти, которое не будет использоваться для большинства запросов »

Правильно ли это, что сумма памяти_лиммит на самом деле предварительно выделена и составляет 192 МБ, будет потрачена впустую для большинства наших Запросы?

Спасибо!

+0

Вы знаете, почему именно ваш предел памяти увеличился? Это похоже на что-то, что подбросит для меня красный флаг. Хороший вопрос, хотя +1 – wuno

+0

Наш предел памяти не изменился, но, честно говоря, мы не знали, что он был установлен на 128 МБ в производственной среде, пока некоторые жалобы мы не получили, что некоторые функции администратора работают неправильно. Инженер хостинговой компании просто рассказал нам об этом выше, после того как мы попросили ограничить ограничение памяти до 256 МБ. – Invisigoth

ответ

2

Нет. Вы не можете предварительно выделить память с помощью memory_limit.

Смотрите этот пост в качестве ссылки, а также: How do I pre-allocate memory for an array in PHP?

Может быть, он имел в виду, что, натыкаясь предел 256M во всем мире, средний запрос пошел в 192 млн. Это означало бы, что многие люди сталкиваются с абсурдно низким пределом 64M.

6

От: http://php.net/manual/en/ini.core.php#ini.memory-limit

Это устанавливает максимальный объем памяти в байтах, что скрипт позволил выделить. Это помогает предотвратить плохо написанные сценарии для , съедая всю доступную память на сервере. Обратите внимание, что для ограничения памяти установите для этой директивы значение -1.

По моему опыту, многие сайты требуют более 128 МБ.

3

Нет, это не так. Он устанавливает максимальный уровень, разрешенный сценарием. Он не выделяется сам по себе. Проверьте его с помощью функции php memory_get_usage.

source

1

Точка на пределе памяти PHP является «предотвратить плохо написанные сценарии съедает всю доступную память на сервере», а не «предварительно выделить объем памяти».

Например, от PHP5.6 source Это просто жесткий колпачок, который применяется по мере необходимости - или другие слова «Максимальный объем памяти, который может потреблять сценарий».

zend_mm_safe_error(heap, "Allowed memory size of %ld bytes exhausted (tried to allocate %ld bytes)", heap->limit, size); 

REF: http://jpauli.github.io/2014/07/02/php-memory.html