今天在用composer的时候又遇到了
Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 4096 bytes)...
的错误,我想这个错误很多人都遇到过,而且大多数情况是在用composer update
的时候遇到的,当然有时候也出现在大家自己写的程序中,今天,我就来总结一下可能出现这个问题的情景,以及每种情况的解决办法。
首先呢,先来说一下这个异常,这个异常呢就是不能分配所需要的内存大小,要么是你php.ini
配置文件中memory_limit
设置太小,要么就是你系统内存不够用了。
针对上面的分析,我想你已经有解决方案了,那就是给它足够的内存。
在开始之前,先说明一个事情,有的同学是在服务器上,而且服务器配置并不高,内存1G甚至都不到,知道要给他足够内存,可是硬件条件不允许啊。这种情况我们就要建置swap了,其实就是一种扩充内存的方式,使用硬盘空间来扩充内存,当内存不足的时候,就会用到swap了。方法详情请见:Linux swap建置
首先你需要找到composer的真实路径,这一步很关键。然后再用这个路径去执行相关命令:
# 查找composer真实路径
which composer
# 打印的结果
/usr/bin/composer
# 执行composer update命令
php -d memory_limit=2G /usr/bin/composer update
注意两点问题,第一,memory_limit=2G
可以根据情况设置,比如我报的错误需要1073741824 bytes
算一下大概是1G,索性我就给他2G,当然,有的老铁不愿意费劲,那就直接 memory_limit=-1
表示不限制内存大小;第二,就是后面的/usr/bin/composer
别忘记根据你自己的打印结果替换。
我们只需要在问题代码之前加上一条语句即可:
ini_set(‘memory_limit’,‘-1’);
其中-1
是指不限制内存大小,当然你也可以指定大小,例如512M
, '1G'。
首先找到配置文件位置:
php -i | grep php.ini
# 打印结果
Configuration File (php.ini) Path => /etc/php/7.1/cli
Loaded Configuration File => /etc/php/7.1/cli/php.ini
这样我们找到了配置为文件位置为: /etc/php/7.1/cli/php.ini
,编辑它
vim /etc/php/7.1/cli/php.ini
我们按/
键进入查找模式,输入memory_limit
,回车查找,如果直接没有定位到配置项 按 n
继续查找下一个,N
返回上一个查找位置,一般可以直接找到,定位到 memory_limit
之后 将后面的值调大,比如:
# 原来
memory_limit=64M
#修改后
memory_limit=128M
然后重启php-fpm,先杀后启动:
# 杀掉
pkill php-fpm
# 启动
php-fpm
注:这里命令可能有所不同,可能你的php-fpm后面会跟版本号,例如你需要用php-fpm7.2
启动,这里你就随机应变吧,实在不会弄,重启大法好,反正Linux重启也快。