На некоторых страницах нашего сайта установлен предел памяти PHP, который в настоящее время составляет 128 МБ. При запросе увеличить ограничение памяти до 256 МБ, инженер нашей хостинговой компании сказал нам, что:
На нашем сервере «средний запрос требует менее 64 МБ оперативной памяти»
а также
«Смещение предела памяти до 256 МБ по существу создает среднее выделение 192 МБ памяти, которое не будет использоваться в большинстве запросов»
Правильно ли это, что количество memory_limit на самом деле предварительно выделено и составляет 192 МБ для большинства наших запросов?
Спасибо!
От: http://php.net/manual/en/ini.core.php#ini.memory-limit
Это устанавливает максимальный объем памяти в байтах, что скрипт
Разрешено выделять. Это помогает предотвратить плохо написанные сценарии для
пожирая всю доступную память на сервере. Обратите внимание, что не иметь
ограничение памяти, установите эту директиву -1.
По моему опыту, многие сайты требуют более 128M.
Нет. Он устанавливает максимум, который скрипту разрешено выделять. Он не выделяет сам по себе. Проверьте это с помощью php memory_get_usage
функция.
Нет. Вы не можете предварительно выделить память с помощью memory_limit.
Смотрите этот пост как ссылку: Как предварительно выделить память для массива в PHP?
Возможно, он имел в виду, что, увеличив глобальный лимит до 256 миллионов, средний запрос вырос до 192 миллионов. Это будет означать, что многие люди достигают абсурдно низкого предела 64M.
Смысл ограничения памяти PHP заключается в том, чтобы «предотвращать плохо написанные сценарии для использования всей доступной памяти на сервере», а не «предварительно выделять объем памяти».
Например из PHP5.6 источник Это просто жесткий предел, который применяется по мере необходимости — или другими словами «Максимальный объем памяти, который может потреблять скрипт».
zend_mm_safe_error(heap, "Allowed memory size of %ld bytes exhausted (tried to allocate %ld bytes)", heap->limit, size);