Я пытаюсь увеличить разрешенную память для определенного PHP-скрипта. Независимо от того, что я делаю, например, это:PHP не может использовать 300 МБ ОЗУ
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 Гб или RAM)
- Официальные PHP 32-разрядные VC9 двоичные файлы
- Запуск в Apache 2.2 модуль (третьей стороны 32-разрядных VC9 двоичных файлов)
Я понимаю, что использование половины физической памяти заставит swa pping и медленные вещи, как черт, но мне просто нужно убедиться, что скрипт работает, поэтому его можно развернуть на живой сервер. Я также пробовал более крупные значения (которые выдавали ту же ошибку) и меньшие значения (с тем, что мой скрипт достиг предела или сделал сбой Apache).
Что может быть источником этого явно жесткого ограничения памяти?
Обновление № 1: Я провел дополнительные испытания с помощью окна Windows Server 2003 (который фактически является виртуальной машиной VMWare). Я увеличил «физическую» оперативную память до 2 ГБ, и я подтвердил, что файлу подкачки разрешено вырасти до 1152 МБ. Диспетчер задач показывает, что текущая транзакционная нагрузка составляет 886 МБ, и имеется 1,5 ГБ свободной физической памяти. Тем не менее, я получаю ту же ошибку с точно такими же цифрами.
Обновление № 2: Как я уже говорил, директива memory_limit
в порядке. Он отображается как в ini_get()
, так и в phpinfo()
. Сообщение об ошибке, которое вы получите, немного отличается от моего; my указывает на ошибку PHP . Пожалуйста, сравните:
Out of memory (allocated 25165824) (tried to allocate 343810589 bytes)
Allowed memory size of 25165824 bytes exhausted (tried to allocate 343810589 bytes)
Я попытаюсь составить сценарий для воспроизведения проблемы и отчета.
Если PHP пытается захватить столько памяти за один раз, то я предполагаю, что вы пытаетесь загрузить файл ... попробуйте загрузить файл в кусках, а не за один раз –
«Если вы не можете оптимизировать , купите больше ОЗУ ... »Ну, некоторое время это неправильно ...;) Вы уверены, что вам нужна вся эта память? 300MB уже огромная сумма. Возможно, вы можете немного оптимизировать свой скрипт ... – Macmade
Вы на 100% уверены, что ОС имеет более 300 МБ свободной памяти? – DaveRandom