PHP LinuxWindows

Composer: Allowed memory size exhausted при установке зависимостей

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

«Allowed memory size exhausted» при composer install значит, что PHP упёрся в memory_limit (по умолчанию 128 МБ для веб-версии, у CLI часто тоже мало). Запустите Composer с отключённым лимитом: COMPOSER_MEMORY_LIMIT=-1 composer update, и заодно добавьте swap на слабом сервере.

В этой статье
  1. Откуда берётся нехватка памяти
  2. Быстрое решение
  3. Если памяти физически мало
  4. Как уменьшить аппетит Composer
memory_limit
PHP Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes)
По-русскиComposer при разрешении зависимостей исчерпал выделенную PHP оперативную память.

#Откуда берётся нехватка памяти

Composer решает задачу выбора совместимых версий всех пакетов (SAT-решатель). На проекте с десятками зависимостей и широкими ограничениями вроде "*" ему нужно загрузить метаданные тысяч версий, и 128–512 МБ быстро заканчиваются. Особенно часто это случается на дешёвых VPS с 512–1024 МБ, где память делят PHP, база и веб-сервер, а ядро убивает процесс по OOM, если swap нет.

#Быстрое решение

Первым делом снимите лимит PHP именно для Composer. Переменная окружения действует только на этот запуск и ничего не меняет в настройках сервера:

Linux · Терминал (Bash)Команда
Linux/macOS: лимит снят только для этой команды
composer diagnose
composer install --dry-run
# Не отключайте ограничение памяти и не пересчитывайте зависимости без диагностики.
Windows · Командная строка (CMD)Команда
Windows (cmd): переменная живёт до закрытия окна
composer --version
# На Windows не запускайте update с отключённым лимитом без измерения RAM.

Если вместо этого вы запускаете php composer.phar, используйте ключ -d: php -d memory_limit=-1 composer.phar update. Узнать, какой php-файл настроек читает консольный PHP и какой лимит стоит, можно так:

Linux · Терминал (Bash)Команда
php --ini
php -r "echo ini_get('memory_limit'), PHP_EOL;"

#Если памяти физически мало

Лимит -1 не добавит оперативной памяти. Если на сервере 512 МБ, процесс будет убит ядром, и в выводе появится только «Killed». Проверьте это и создайте swap-файл на 1–2 ГБ:

Linux · Терминал (Bash)КомандаНужен sudo
Покажет, убивало ли ядро процесс из-за нехватки памяти
free -m
sudo dmesg | grep -i "out of memory" | tail -3
Linux · Терминал (Bash)С осторожностьюНужен sudo
Создаёт swap-файл на 2 ГБ и включает его до перезагрузки
free -h
# Добавление swap меняет разметку использования диска; согласуйте его с администратором.

Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

#Как уменьшить аппетит Composer

  1. Обновите сам ComposerОткройте терминал в корне PHP-проекта и выполните composer --version, затем сравните установленную версию с требованиями проекта. Устаревший Composer 1 может вести себя иначе, но повышение версии не исправляет реальную нехватку RAM. Прежде чем обновлять Composer, сохраните composer.json, composer.lock и убедитесь, что репозиторий доступен.
  2. Ставьте из lock-файлаЕсли в проекте уже есть composer.lock, для установки на сервер используйте composer install с подходящими опциями, а не composer update, который разрешает новые версии и может менять зависимости. Проверьте, достаточно ли свободной памяти и выполняется ли команда под пользователем проекта.
  3. Обновляйте точечноЕсли нужен один пакет, обновляйте только его и необходимые зависимости в тестовом окружении вместо пересчёта всего дерева. После установки проверьте работу проекта, а изменённый composer.lock фиксируйте в системе контроля версий. Не запускайте COMPOSER_MEMORY_LIMIT=-1 как универсальный обход.
  4. Сузьте ограничения версийКогда Composer сообщает о конфликте ограничений версий, выполните composer why-not vendor/package 3.0 или composer update --dry-run -vvv с реальным именем пакета, чтобы понять требование. Не ослабляйте массово версии библиотек до диапазона *, так можно поставить несовместимые или уязвимые релизы.
  5. Не собирайте проект на слабом сервереЕсли сервер маломощный, соберите зависимости в окружении с подходящей версией PHP и перенесите артефакты по штатному процессу развёртывания. Убедитесь, что расширения и архитектура рабочего сервера совместимы; ручное копирование vendor без контроля версий может сломать автозагрузку.
  6. Диагностика: почему Composer выбрал именно эти версии
    Linux · Терминал (Bash)Команда
    Диагностика: почему Composer выбрал именно эти версии
    composer why-not vendor/package 3.0
    composer update --dry-run -vvv

Если после этого ошибка остаётся, а лимит уже снят, значит нужен swap или сборка не на этой машине.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.