Я получаю ошибку, когда запускаю свой PHP-скрипт …
Fatal error: Out of memory (allocated 1827405824) (tried to allocate 88800 bytes)
Я добавил эту строку в свой PHP-скрипт.
ini_set("memory_limit","3000M");
Кажется, что этот оператор правильно контролирует использование памяти, но я, похоже, не могу получить его выше 1,8 ГБ. Как будто верхний предел памяти ограничивается где-то еще. Я также добавил в php.ini …
memory_limit = 3000M
Кто-нибудь знает, ограничена ли память в другом месте?
Я запускаю локальный сервер с Xampp. У меня Windows 7, 64-бит с 4 ГБ оперативной памяти. Мой скрипт использует библиотеку изображений PHP GD, и я получаю ошибку при попытке выделить ссылку на изображение с помощью ImageCreateTrueColor ().
(Я знаю, что это огромный объем памяти, но это всего лишь один сценарий, и его гораздо проще сделать так).
Благодарю.
Обновить….
@elusive @Orbling Я ожидаю, что всем будет скучно с этим вопросом, но вот упрощенный код, который иллюстрирует проблему.
<?php ini_set("memory_limit","4000000000"); echo "ini_get = " . ini_get('memory_limit') . "<br>\n"; echo "memory_get_usage = " . memory_get_usage(true) . "<br>\n"; $bigImageHandle = imagecreatetruecolor(22200, 24800); //this is line 5 ?>
Выход из браузера …
ini_get = 4000000000 memory_get_usage = 524288 Fatal error: Out of memory (allocated 1843396608) (tried to allocate 88800 bytes) in E:\User\My_Webs\experiments\houseshunting\temp\osMaps\t1.php on line 5
Я проверил это с меньшим набором плиток и памятью, используемой imagecreatetruecolor (), и я считаю, что мне нужно 2,7 ГБ
Вы работаете в 64-разрядной операционной системе, но Apache и PHP, вероятно, все еще 32-разрядные. Если вы используете mod_php, apache будет здесь ограничивающим фактором.
32-разрядные процессы ограничены объемом 2 Гбайт ОЗУ, если вы не использовали переключатель / 3GB, и программное обеспечение знает о поддержке 3 ГБ.
Это все еще оставляет около 200 MiB, что кажется неиспользованным, но его достаточно мало, чтобы его можно было использовать различными библиотеками, которые все должны быть загружены в память
Насколько мне известно, использование библиотеки не будет отображаться в фиксированной памяти, но все равно учитывает предел 2GiB (так же, как память устройства рассчитывается в соответствии с лимитом 4GiB для 32-битных окон. Там, где установлена 2 видеокарты GiB, вы получаете до менее 2 ГБ оперативной памяти).
Скорее всего, решение? Установите 64-битный PHP, а затем отправьте его на это (возможно, используя вызов system ())
Используя Acquia Dev Desktop, у меня было много сбоев в памяти.
После увеличения предела памяти в PHP.ini.
php_value memory_limit 1024M php_value max_execution_time 3000
Эта проблема была менее частым, но все еще возникающим (особенно с функцией Recreate)
В мой httpd.conf я увеличил StackThread до 16M
ThreadStackSize 16*1024*1024
И он решил проблему сбоя памяти. Надеюсь, это поможет
Попробуй это
set_time_limit(300); ini_set('memory_limit', '20000M');
Проверьте конфигурацию Apache (например, httpd.conf). Вероятно, директива RLimitMEM, ограничивающая память, позволяет дочерним процессам обрабатывать запросы.
Таким образом, вы можете установить предел PHP, который вы хотите, если Apache запускает процесс с ограничением памяти, вы не можете превышать его.
Если вы используете размещенную службу и имеете общий сервер, вероятно, у вас нет доступа к этой конфигурации и вам необходимо работать с вашим провайдером. Как вы можете видеть, это настройка, которая применяется на сервере в целом … вы вряд ли захотите заставить их изменить это. Опять же, если вы хотите создать не более 1.5Gig процессов, вы должны либо решить проблему по-другому (другие предложили это), либо получить выделенный сервер какого-либо типа (например, EC2).
Например:
/usr/local/apache/conf #RLimitMEM 85643200 104857600 # Limit to: 80Mb / process, 100Mb total RLimitMEM 134217728 537395200 # Limit to: 128Mb / Process, 512Mb total
Какую версию PHP вы используете?
Переменная memory_limit является или содержалась в 32-битном целочисленном значении, поэтому не может превышать 2 ГБ.
См .: http://bugs.php.net/bug.php?id=39132&edit=1
Из нижнего комментария к этому отчету об ошибке это может быть процедура, которая преобразует читаемую форму человека в число, попробуйте поместить ее в цифры.
Попробуй это:
#php_value memory_limit 300M #php_value upload_max_filesize 200M #php_value post_max_size 200M #php_value max_execution_time 80000 #php_value max_input_time 80000
Вероятно, проблема связана с запуском 32-разрядных apache и php. Попробуйте обновить их до 64-битных двоичных файлов и посмотреть, устраняет ли это проблему.
попробуйте ini_set('memory_limit', '-1');