Composer運行中斷并顯示Killed的問題

在內存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

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享