在內(nèi)存1GB(分配給PHP的最大運(yùn)行內(nèi)存是128MB)的Linode VPS上運(yùn)行Composer安裝Drupal模塊,沒有得到成功的提示,只是提示KILLED。
通過修改分配給PHP的運(yùn)行內(nèi)存把PHP內(nèi)存由128MB提高到256MB以后,報錯具體了一點(diǎn):
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.最簡單粗暴而最有效的辦法就是把服務(wù)器升級,給服務(wù)器加內(nèi)存。實(shí)在窮心疼錢的話,就放棄Composer或者曲線救國。
2.備選方案就是給服務(wù)器分配點(diǎn)假的內(nèi)存糊弄一下服務(wù)器,SWAP緩存了解一下。大偉哥這里有一篇貼子:SWAP問答:SWAP是什么?SWAP有什么用?SWAP怎么用?
大偉哥就是通過把服務(wù)器的SWAP緩存增加到2.5 GB解決的。當(dāng)然,假的終究是假的,硬盤做的緩存,在性能上肯定是比不過真正的內(nèi)存的。
3.Stack Overflow上還有人分享了一個方法可能有效,不過大偉哥沒有試過。那就是在本地開發(fā)環(huán)境上運(yùn)行Composer,成功以后把composer.lock上傳或者git push到生產(chǎn)服務(wù)器上,然后在生產(chǎn)服務(wù)器上運(yùn)行composer install。
composer install會讀取.lock文件里面的配置并直接拉取相同版本的軟件包下來,而不是查找每個軟件包的最新版本。這樣composer對內(nèi)存的需求量就會降低一些。
不過這種方法本身很麻煩,成功率又堪憂,所以能不用就不用吧。
最后,分享給大家一個不用修改php.ini配置文件,臨時解禁composer運(yùn)行內(nèi)存限制的方法:
php -d memory_limit=-1 /usr/local/bin/composer require/isntall/update
或者:
php -d memory_limit=-1 `which composer` require/isntall/update