我正在使用 drush,这是一个用于管理 drupal 网站的命令行 php 应用程序。我正在运行一个命令来导入大量数据,这导致我达到了 php 的内存限制。
PHP Fatal error: Allowed memory size of 536870912 bytes exhausted ...
如果我没算错的话,这个数字是 512MB (536870912 / 1024 / 1024 = 512)。我更改了 drush 使用的 php.ini 中的指令:
$> 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 MB 的限制!我在虚拟机中运行,我将内存设置从 512 MB 更改为 1025 MB RAM,以允许 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 MB 的可用内存,现在我已将虚拟机提升到 1024。我猜一半的内存被用来运行 GUI,但我不明白当虚拟机有 512 MB 的 RAM 时 GUI 是如何运行正常的。
为什么 PHP cli 仍然达到 512 MB 的内存限制?如果它达到系统内存限制,它不应该在命令free
显示的可用内存量为 431MB 左右时死机吗?
答案1
最有可能的是,您有多个 php.ini 文件(请检查类似的内容/etc/php5/cli
)并且正在编辑错误的文件,或者您在包含文件ini_set('memory_limit', '512M');
中的设置settings.php
,或者类似的东西。
答案2
对于像我一样在 Google 上搜索此问题的其他人,请运行以下命令:
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
也许您正在尝试更改错误的文件中的配置。
答案3
以 Mac 为例
/etc/php5/cli
用于命令行,因此您需要更改/etc/php5/cgi/php.ini
那应该可行!