在内存1GB(分配给PHP的最大运行内存是128MB)的Linode VPS上运行Composer安装Drupal模块,没有得到成功的提示,只是提示KILLED。

通过修改分配给PHP的运行内存把PHP内存由128MB提高到256MB以后,报错具体了一点:

Fatal error: Out of memory (allocated 754982912) (tried to allocate 33554440 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/RuleSet.php on line 84
登录后复制

加到512MB:

Fatal error: Out of memory (allocated 832577536) (tried to allocate 16777216 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/Solver.php on line 223
登录后复制

再加到768MB,报错又变成一句简单的KILLED了。

看来Composer的胃口不小啊。怎么办?

1.最简单粗暴而最有效的办法就是把服务器升级,给服务器加内存。实在穷心疼钱的话,就放弃Composer或者曲线救国。

2.备选方案就是给服务器分配点假的内存糊弄一下服务器,SWAP缓存了解一下。大伟哥这里有一篇贴子:SWAP问答:SWAP是什么?SWAP有什么用?SWAP怎么用?

大伟哥就是通过把服务器的SWAP缓存增加到2.5 GB解决的。当然,假的终究是假的,硬盘做的缓存,在性能上肯定是比不过真正的内存的。

3.Stack Overflow上还有人分享了一个方法可能有效,不过大伟哥没有试过。那就是在本地开发环境上运行Composer,成功以后把composer.lock上传或者git push到生产服务器上,然后在生产服务器上运行composer install。

composer install会读取.lock文件里面的配置并直接拉取相同版本的软件包下来,而不是查找每个软件包的最新版本。这样composer对内存的需求量就会降低一些。

不过这种方法本身很麻烦,成功率又堪忧,所以能不用就不用吧。

最后,分享给大家一个不用修改php.ini配置文件,临时解禁composer运行内存限制的方法:

php -d memory_limit=-1 /usr/local/bin/composer require/isntall/update
登录后复制

或者:

php -d memory_limit=-1 `which composer` require/isntall/update
登录后复制

以上就是Composer运行中断并显示Killed的问题的详细内容,更多请关注Work网其它相关文章!

09-16 21:41