PHP не может использовать 300 МБ ОЗУ

Я пытаюсь увеличить разрешенную память для определенного сценария 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 ГБ или ОЗУ)
  • Официальные 32-разрядные двоичные файлы PHP VC9
  • Запуск как модуль Apache 2.2 (сторонние 32-разрядные двоичные файлы VC9)

Я понимаю, что использование половины физической ОЗУ вызовет подкачку и замедлит работу черт возьми, но мне просто нужно убедиться, что сценарий действительно работает, чтобы его можно было развернуть на реальном сервере. Я также пробовал большие значения (которые вызывали ту же ошибку) и меньшие значения (либо мой скрипт достиг предела, либо вызывал сбой Apache).

Что может быть источником этого явно жестко запрограммированного ограничения памяти?

Обновление №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)

Я попытаюсь написать сценарий, чтобы воспроизвести проблему и сообщить о ней.

6
задан Álvaro González 31 January 2012 в 12:54
поделиться