在記憶體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的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!