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