当composer update卡住或提示内存不足时的分析
建议执行“composer update -vvv”查看具体卡住在哪,一般在下载,写入,读取类似这种
Downloading https://repo.packagist.org/p/guzzlehttp/psr7.json
Writing /root/.cache/composer/repo/https---packagist.phpcomposer.com/provider-guzzlehttp$psr7.json into cache
这时可以ctrl+c直接中断然后再次执行“composer update -vvv”发现它已经通过了刚刚卡住的地方了
具体原因不好不好说,不过我这测试服务器就1G内存加上交换空间的1G还是会卡住,看了下composer的源码有这块
$memoryLimit = trim(ini_get('memory_limit'));
// Increase memory_limit if it is lower than 1.5GB
if ($memoryLimit != -1 && $memoryInBytes($memoryLimit) < 1024 * 1024 * 1536) {
@ini_set('memory_limit', '1536M');
}
// Set user defined memory limit
if ($memoryLimit = getenv('COMPOSER_MEMORY_LIMIT')) {
@ini_set('memory_limit', $memoryLimit);
}
unset($memoryInBytes, $memoryLimit);
说明如果设置php设置内存不够1536M,它会直接把内存限制设置到此数量,另外下面有个配置可以配置composer的内存限制,通过查看相关文档并对比测试后发现
//无限制
export COMPOSER_MEMORY_LIMIT=-1
//单位是byte (B)也即是300M
export COMPOSER_MEMORY_LIMIT=314572800
但如果设置比1536M低的内存在执行composer update等操作过程中还是会报内存不够,目前能解决的方式:加swap,更改镜像源
另外需要说明composer执行过程中由于是命令行执行,所以php.ini的内存限制并不生效
此处多说一句,有时laravel迁移环境后出现空白页面这种情况,除了了内部两个文件夹权限问题,有时需要执行composer update更新下才能解决
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: