Я пытаюсь увеличить разрешенную память для определенного скрипта PHP.Независимо от того, что я делаю, например, это:
ini_set('memory_limit', '512M');
... скрипту всегда не хватает памяти около 300 МБ:
Fatal error: Out of memory (allocated 25165824) (tried to allocate 343810589 bytes) in \\Foo\phpQuery\phpQuery.php on line 255
Я несколько раз проверял, чтоmemory_limit
фактически изменилось.Кажется, проблема в том, что PHP не может физически выделить 300 МБ памяти (25165824 байт + 343810589 байт = 352 МБ).
Я пробовал как PHP / 5.3.0, так и PHP / 5.3.9 на двух разных компьютерах под управлением Windows со следующими характеристиками:
- Windows XP / Windows Server 2003 (оба компьютера являются 32-разрядными блоками с 1 ГБ или ОЗУ)
- Официальный PHP32-разрядные двоичные файлы VC9
- Запуск в качестве модуля Apache 2.2 (сторонние 32-разрядные двоичные файлы VC9)
Я понимаю, что использование половины физической ОЗУ приведет к перестановке и замедлению работычерт возьми, но мне просто нужно убедиться, что скрипт действительно работает, чтобы его можно было развернуть на работающем сервере.Я также пробовал большие значения (которые вызывали ту же ошибку) и меньшие значения (либо заставил мой скрипт достигнуть предела, либо сделал сбой Apache).
Что может быть источником этой явно жестко запрограммированной памятиlimit?
Обновление № 1: Я провел дополнительное тестирование с помощью Windows Server 2003 (которая фактически является виртуальной машиной VMWare).Я увеличил «физическую» оперативную память до 2 ГБ и убедился, что файлу подкачки разрешено увеличиваться до 1152 МБ.Диспетчер задач показывает, что текущая нагрузка транзакции составляет 886 МБ, а свободной физической памяти 1,5 ГБ.Однако я получаю ту же ошибку с точно такими же цифрами .
Обновление № 2: Как я уже сказал, директива memory_limit
в порядке.Он отображается в ini_get()
и phpinfo()
.Сообщение об ошибке, которое вы получите, немного отличается от моего;мой указывает на PHP крах .Пожалуйста, сравните:
Out of memory (allocated 25165824) (tried to allocate 343810589 bytes)
Allowed memory size of 25165824 bytes exhausted (tried to allocate 343810589 bytes)
Я попытаюсь составить сценарий для воспроизведения проблемы и сообщить о ней.