PHP CLI не соблюдает ограничение памяти в php.ini

8918
user13743

Я использую drush, приложение php для командной строки, для управления веб-сайтом drupal. Я запускаю команду для импорта большого количества данных, что приводит к тому, что я превышаю ограничение памяти php.

PHP Fatal error: Allowed memory size of 536870912 bytes exhausted ... 

Что составляет 512 МБ, если я правильно делаю математику (536870912/1024/1024 = 512). Я изменил директиву в php.ini, которую использует drush:

$> drush status ... PHP configuration : /etc/php5/cli/php.ini  $> grep memory /etc/php5/cli/php.ini  ; Maximum amount of memory a script may consume (128MB) ; http://php.net/memory-limit memory_limit = 1024M  

Но я все еще бью предел в 512 МБ! Я работаю на виртуальной машине, чьи настройки памяти я изменил с 512 до 1025 МБ ОЗУ, чтобы можно было запускать drush.

$> free -m total used free shared buffers cached Mem: 1010 578 431 0 14 392 -/+ buffers/cache: 172 837 Swap: 382 0 382 

Таким образом, он говорит, что у него есть около 431 МБ свободного места, теперь, когда я увеличил виртуальную машину до 1024. Я думаю, половина памяти используется для запуска графического интерфейса, но я не понимаю, как нормально работал графический интерфейс, когда виртуальная машина было 512 МБ оперативной памяти.

Почему PHP Cli все еще превышает ограничение памяти в 512 МБ? Если оно достигло предела системной памяти, не должно ли оно умереть около 431 МБ, что, по freeсловам команды, доступно?

4
Вы путаете ограничения виртуальной памяти с ограничениями физической памяти. Ограничение памяти PHP - это ограничение виртуальной памяти. Вывод `free` - это вся физическая память. Кроме того, вы ошибаетесь в том, что половина памяти используется для запуска графического интерфейса. Память используется в основном для буферов и кеша. Система просто не удосужилась сделать ее свободной, потому что у нее уже достаточно свободной памяти, так что это будет напрасной тратой усилий. David Schwartz 12 лет назад 0
Скорее всего, у вас есть несколько файлов `php.ini` (отметьте что-то вроде` / etc / php5 / cli`) и вы редактируете неверный файл или у вас есть `ini_set ('memory_limit', '512M');` установка в файле `settings.php` или тому подобное, которое включено. David Schwartz 12 лет назад 1
@David - у меня был дополнительный ini_set () в coedbase, зависший от кода устранения неполадок. Если вы отправите ответ, я проголосую и приму его. user13743 12 лет назад 0

3 ответа на вопрос

5
David Schwartz

Скорее всего, у вас есть несколько файлов php.ini (отметьте что-то подобное /etc/php5/cli), и вы редактируете неправильный файл, или у вас есть ini_set('memory_limit', '512M');параметр в settings.phpфайле или тому подобное, который включается.

1
A.Maksymiuk

Для других людей, которые задают этот вопрос, например, я, выполните следующую команду:

php --ini 

Чтобы увидеть, какую конфигурацию использует php-cli. Вы увидите что-то вроде этого:

Loaded Configuration File: /etc/php/7.1/cli/php.ini 

Или вот так:

Loaded Configuration File: /opt/php-7.0.26/etc/php.ini 

Возможно, вы пытаетесь изменить конфигурацию в неправильном файле.

0
espaciomore

in Mac for instance

/etc/php5/cli is for command line, so you need to change /etc/php5/cgi/php.ini

that should work !

Похожие вопросы