Allowed memory size of 8388608 bytes exhausted

Довольно частовозникающая и легко исправляемая в web-скриптах ошибка.
Мною была замечена в NetCat и Joomla (но судя по серпу гугла бывает и в Drupal).

Эта ошибка может возникать в сценариях PHP, когда требования php-скрипта к памяти по умолчанию превышает 8MB предел. Проблема эта легко решается.

1. Чтобы изменить ограничение памяти для одного конкретного сценария необходимо вставить строку кода в начало скрипта, например такую:

<?php
ini_set("memory_limit","12M");
...

Параметр «12M» устанавливает предел использования памяти скриптом до 12 мегабайтам (12582912 байт). Если эта цифра не спасла можно продолжать ее увеличивать пока скрипт не заработает или у сервака не кончится память.
2. Также есть возможность произвести эти изменения настроек предела памяти надолго и для всех скриптов PHP, работающих на сервере, изменив одну строчку в файле настроек php.ini:

...
memory_limit = 12M
...

Имейте в виду, что увеличение предела требуемой скрипту памяти плохая замена хорошего кода. Плохо написанный скрипт может неэффективно тратить память, что может вызвать серьезные проблемы для часто выполняемых скриптов. С другой стороны это не так важно для ресурсоемких, но редкозапускаемых приложений, например, для процессов импорта и обработки больших баз данных.

Решение проблемы «Allowed memory size of 8388608…» при установке NetCat

Иногда при установке NetCat на локальный сервер (denwer, appserv или xammp) при первом вызове главной страницы выпадает ошибка (при использовании xdebug.dll):


( ! ) Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 393216 bytes) in C:\AppServ\www\netcat\require\s_list.inc.php on line 1279
Call Stack
# Time Memory Function Location
1 0.0007 64224 {main}( ) …\index.php:0
2 0.0149 267432 require( 'C:\AppServ\www\netcat\require\e404.php' ) …\index.php:4
3 0.7702 7168936 require( 'C:\AppServ\www\netcat\index.php' ) …\e404.php:474
4 0.7757 7320880 require( 'C:\AppServ\www\netcat\require\index.php' ) …\index.php:27

Таким образом становится понятно, что памяти нехватило скрипту e404.php — пишем строку про 12 метров либо исправляем используя второй вариант.

Еще одна родственная ошибка:

Fatal error: Maximum execution time of 30 seconds exceeded …

Как следует из перевода ? скрипту не хватает на выполнение 30 секунд. Зачастую она возникает из-за подвисания службы сервера БД MySQL, то есть если добавление времени в php.ini не помогло:

// в самом скрипте
ini_set("max_execution_time", "30");
// либо в php.ini
max_execution_time=30

то имеет смысл попробовать перезагрузить службы (или рабочую станцию целиком :) ).

Комментариев: 8

  • 17.12.2010 Хусан Талтаходжаев midagent, OMG:

    Лучше есть способ и легче, зайдите в php.ini , найдите строчку

    ; Maximum amount of time each script may spend parsing request data

    memory_limit = 8M

    поменяйте значение memory_limit и все

    • 17.12.2010 Кирилл:

      Ага, по сути тоже самое, только сразу для всех скриптов.

  • 26.02.2011 Кирилл:

    а если памяти сервака не хватает, что тогда делать? ну в смысле php.ini править не помогает,и в скрипты прописано уже очень много памяти, есть альтернатива какая то?

  • 26.02.2011 Kirill:

    servak lokalnbIi denwer

    vot postavil linux tyt to takix oshibok nt bydet?)))

  • 27.02.2011 Kirill:

    a na windows kakoi servak prodlojil bbI vmesto denwer'a ???


Добавление комментария:

 css.php