建議執行“composer update -vvv”檢視具體卡住在哪,一般在下載,寫入,讀取類似這種
Downloading https://repo.packagist.org/p/guzzlehttp/psr7.json
Writing /root/.cache/composer/repo/https---packagist.phpcomposer.com/provider-guzzlehttp$psr7.json into cache
這時可以ctrl+c直接中斷然後再次執行“composer update -vvv”發現它已經透過了剛剛卡住的地方了
具體原因不好不好說,不過我這測試伺服器就1G記憶體加上交換空間的1G還是會卡住,看了下composer的原始碼有這塊
$memoryLimit = trim(ini_get('memory_limit'));
// Increase memory_limit if it is lower than 1.5GB
if ($memoryLimit != -1 && $memoryInBytes($memoryLimit) < 1024 * 1024 * 1536) {
@ini_set('memory_limit', '1536M');
}
// Set user defined memory limit
if ($memoryLimit = getenv('COMPOSER_MEMORY_LIMIT')) {
@ini_set('memory_limit', $memoryLimit);
}
unset($memoryInBytes, $memoryLimit);
說明如果設定php設定記憶體不夠1536M,它會直接把記憶體限制設定到此數量,另外下面有個配置可以配置composer的記憶體限制,透過檢視相關文件並對比測試後發現
//無限制
export COMPOSER_MEMORY_LIMIT=-1
//單位是byte (B)也即是300M
export COMPOSER_MEMORY_LIMIT=314572800
但如果設定比1536M低的記憶體在執行composer update等操作過程中還是會報記憶體不夠,目前能解決的方式:加swap,更改映象源
另外需要說明composer執行過程中由於是命令列執行,所以php.ini的記憶體限制並不生效
此處多說一句,有時laravel遷移環境後出現空白頁面這種情況,除了了內部兩個資料夾許可權問題,有時需要執行composer update更新下才能解決
本作品採用《CC 協議》,轉載必須註明作者和本文連結