解决composer报错:超出内存大小的问题「Allowed memory size 」

1. 问题背景

在使用composer安装依赖包的时候,可能会遇到“Allowed memory size”错误提示,意味着内存不够用,需要解决该问题才能顺利安装依赖。

2. 解决方案

2.1 修改php.ini配置文件

php.ini配置文件中有memory_limit参数,该参数限制了php程序使用的内存大小,需要将该值适当调大。

memory_limit = 512M //将值设置为512M

修改php.ini配置文件后需要重启php服务,使其生效。

改变了这个值不会影响内存消耗更高的代码,因此需谨慎操作,确定提升memory_limit值后,务必重启php服务!

2.2 临时修改php.ini配置文件

如果没有权限修改php.ini配置文件,可以在终端中直接修改。

php -d memory_limit=512M composer.phar install //将memory_limit参数设置为512M启动composer安装依赖

2.3 修改composer配置文件

如果上述两种方法都无法解决问题,还可以尝试修改composer配置文件。

composer config -g memory-limit 512M //将memory-limit参数设置为512M

该命令会在全局composer配置文件中增加或修改memory-limit参数的值,使其达到适当大小。

3. 预防措施

3.1 优化代码

优化代码可以减少内存消耗。

删除经常性调用,但无实际用途的代码部分,例如:

//删除无实际用途的代码

$a = 1 + 1;

//替换经常性调用的代码段

for ($i = 0; $i < count($arr); $i++) {

// handle $arr[$i]

}

//使用foreach替换for循环

foreach ($arr as $key => $value) {

// handle $value

}

3.2 分批安装依赖包

将依赖包分批安装,每次安装依赖之前检查系统内存是否充足。

实例:

$totalPkgs = count($pkgs);

$piece = 10; //每次处理10个依赖包

$iStart = 0;

while ($iStart < $totalPkgs) {

$iEnd = $iStart + $piece;

if ($iEnd > $totalPkgs) {

$iEnd = $totalPkgs;

}

system("free -m", $retVal);

if ($retVal == 0) { //系统内存充足

$cmd = "php -d memory_limit=2048M /usr/local/bin/composer install " . implode(" ", array_slice($pkgs, $iStart, $iEnd));

system($cmd, $retVal);

} else { //系统内存不足

sleep(10); //等待10秒后再处理

}

$iStart = $iEnd;

}

4. 总结

在使用composer安装依赖包时,有可能遇到内存不够用的问题。此时可以按照上述方案来解决问题。

另外,为了预防该问题,可以优化代码和分批安装依赖包,使内存消耗更低,提高系统运行稳定性。