Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 4096 bytes)...

2019-03-11 14:02:27   错误异常

今天在用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建置

1. composer临时增大内存限制执行update

首先你需要找到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 别忘记根据你自己的打印结果替换。

2. 自己写的代码中出现的问题,并且不希望改变全局设置,仅仅在执行这段代码的时候不限制内存

我们只需要在问题代码之前加上一条语句即可:

ini_set(‘memory_limit’,‘-1’);

其中-1是指不限制内存大小,当然你也可以指定大小,例如512M, '1G'。

3. 希望通过修改配置文件更改全局配置

首先找到配置文件位置:

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重启也快。

vien.tech版权所有,允许转载,但转载请注明出处和原文链接: https://viencoding.com/article/119
欢迎小伙伴们在下方评论区留言 ~ O(∩_∩)O
文章对我有帮助, 点此请博主吃包辣条 ~ O(∩_∩)O

猜你喜欢


评论

There are no comments yet.
未登录

登录后即可发表评论

登录或注册

亲情非友情链接