J'utilise composer sur mon projet Laravel 6. Cependant, d'une manière ou d'une autre, je rencontre toujours le problème "Taille de la mémoire autorisée de 1610612736 octets épuisés". Je ne sais pas pourquoi mais depuis quelques jours j'ai ce problème et je ne sais pas pourquoi ni d'où il vient.
Ce qui est curieux, c'est que j'obtiens exactement la même erreur sur mon serveur de développement. Cela signifie qu'il doit faire quelque chose avec le projet Laravel lui-même. Parce que comme je l'ai dit, sur mon Mac ainsi que sur mon serveur de développement, j'obtiens exactement la même sortie avec exactement la même configuration et le même projet.
La seule solution de contournement est php -d memory_limit=-1 composer update
. Mais je ne peux pas faire cela sur mon serveur car je ne suis pas l'administrateur du serveur et j'ai une utilisation limitée de la RAM. Donc, je veux savoir ce qui cause ce problème et comment je peux le résoudre.
Avez-vous besoin de plus d'informations que celles ci-dessous? J'apprécie toute sorte d'aide!
Cordialement et merci!
Mon composer.json
:
PHP Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/Cellar/composer/1.10.7/bin/composer/src/Composer/DependencyResolver/Solver.php on line 223 Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/Cellar/composer/1.10.7/bin/composer/src/Composer/DependencyResolver/Solver.php on line 223 Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on how to handle out of memory errors.
Sortie du composer diagnose
du composer diagnose
:
composer update composer install ... ...
Quand j'exécute cette commande:
(Fondamentalement, toutes les commandes où j'installe, supprime ou met à jour des packages)
Checking composer.json: OK Checking platform settings: OK Checking git settings: OK Checking http connectivity to packagist: OK Checking https connectivity to packagist: OK Checking github.com rate limit: OK Checking disk free space: OK Checking pubkeys: Tags Public Key Fingerprint: 57815BA2 7E54DC31 7ECC7CC5 573090D0 87719BA6 8F3BB723 4E5D42D0 84A14642 Dev Public Key Fingerprint: 4AC45767 E5EC2265 2F0C1167 CBBB8A2B 0C708369 153E328C AD90147D AFE50952 OK Checking composer version: OK Composer version: 1.10.10 PHP version: 7.3.18 PHP binary path: /usr/local/Cellar/php@7.3/7.3.18_1/bin/php OpenSSL version: OpenSSL 1.1.1g 21 Apr 2020
J'obtiens la sortie suivante:
{ "name": "laravel/laravel", "type": "project", "description": "The Laravel Framework.", "keywords": [ "framework", "laravel" ], "license": "MIT", "repositories": [ { "type": "composer", "url": "https://nova.laravel.com" } ], "require": { "php": "^7.2", "components/jquery": "^3.4", "cybercog/laravel-nova-ban": "^1.1", "emilianotisato/nova-tinymce": "^1.1", "fideloper/proxy": "^4.0", "glorand/laravel-model-settings": "^3.5", "inspheric/nova-indicator-field": "^1.43", "kabbouchi/nova-logs-tool": "^0.2.0", "laravel/framework": "^6.2", "laravel/nova": "~2.0", "laravel/socialite": "^4.4", "laravel/telescope": "^3.0", "laravel/tinker": "^1.0", "laravel/ui": "^1.1", "laravelcollective/html": "^6.1", "llaski/nova-scheduled-jobs": "^3.0", "mad-web/nova-telescope-link": "^3.0", "orangehill/iseed": "^2.6", "paquettg/php-html-parser": "^2.1", "pdewit/nova-external-url": "^1.0", "phpunit/php-code-coverage": "^9.1", "phpunit/phpunit": "^9.2", "spatie/laravel-honeypot": "^1.4", "spatie/laravel-medialibrary": "^7.19", "spatie/laravel-permission": "^3.2", "twbs/bootstrap": "^4.3", "vyuldashev/nova-permission": "^2.9", "yoeunes/toastr": "^1.2" }, "require-dev": { "barryvdh/laravel-debugbar": "^3.2", "barryvdh/laravel-ide-helper": "^2.6", "brianium/paratest": "^4.1", "facade/ignition": "^1.4", "fzaninotto/faker": "^1.4", "mockery/mockery": "^1.0", "nunomaduro/collision": "^3.0" }, "config": { "optimize-autoloader": true, "preferred-install": "dist", "sort-packages": true }, "extra": { "laravel": { "dont-discover": [] } }, "autoload": { "psr-4": { "App\\": "app/" }, "classmap": [ "database/seeds", "database/factories" ], "files": [ "app/Helpers/helper.php", "app/Helpers/commentsHelper.php" ] }, "autoload-dev": { "psr-4": { "Tests\\": "tests/" } }, "minimum-stability": "dev", "prefer-stable": true, "scripts": { "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan package:discover --ansi" ], "post-root-package-install": [ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ "@php artisan key:generate --ansi" ], "post-update-cmd": [ "Illuminate\\Foundation\\ComposerScripts::postUpdate", "@php artisan ide-helper:generate", "@php artisan ide-helper:meta" ] } }
3 Réponses :
Composer peut parfois consommer beaucoup de mémoire lors de la mise à jour ou de l'installation de nouveaux modules / plugins.
Mettez à jour le compositeur vers la dernière version
COMPOSER_MEMORY_LIMIT=512MB php composer.phar update
Augmentez ensuite la limite de mémoire du composeur dans la variable d'environnement
php composer.phar --self-update
512 Mo est la nouvelle limite. Vous pouvez modifier selon les besoins de votre système. En savoir plus ici
Je suis sur la dernière version You are already using composer version 1.10.10 (stable channel).
et je ne peux pas augmenter la limite du compositeur sur le serveur .. c'est mon problème!
ne pouvez-vous pas changer cela dans le fichier .htaccess
si vous utilisez un serveur partagé? Comme ce SetEnv COMPOSER_MEMORY_LIMIT 512MB
Lorsque composer détecte que la limite de mémoire PHP est trop basse, il augmente automatiquement la limite de mémoire à 1,5 Go. Pour certains jeux de dépendances, il se peut que la mémoire ne soit toujours pas suffisante.
Vous pouvez augmenter la limite de mémoire pour une seule commande composer en spécifiant la variable d'environnement COMPOSER_MEMORY_LIMIT
ligne dans la commande composer. Vous pouvez l'augmenter à une valeur spécifique ou la définir sur -1
pour supprimer la limite de mémoire, afin qu'elle utilise autant que possible. Remarque: cela ne change rien sur le serveur. Cela n'affecte que la limite de mémoire du composeur pour cette seule commande.
# Disable the swap file swapoff ~/.swapfile # Remove the swap file. rm ~/.swapfile
Si vous rencontrez toujours des problèmes de mémoire après cette commande parce que votre système n'a pas assez de mémoire disponible, ou que vous devez limiter artificiellement votre utilisation de la mémoire (vous avez mentionné que vous avez une «utilisation limitée de la RAM»), vous pouvez essayer de configurer et d'utiliser un swap pour augmenter la quantité de mémoire disponible.
Créez et activez un fichier d'échange temporaire:
# Create a 2GiB (1024x2M) empty file at ~/.swapfile # This may take a minute. dd if=/dev/zero of=~/.swapfile bs=1024 count=2M # Setup a swap area in the new empty file. mkswap ~/.swapfile # Enable the swap area in the file (temporary - does not survive reboot). swapon ~/.swapfile
Maintenant, avec la configuration du fichier d'échange, exécutez vos commandes de composition. Cela peut prendre un peu plus de temps que d'habitude, car les fichiers d'échange sont plus lents que la RAM.
Une fois que vous avez terminé avec vos commandes de composition, vous pouvez désactiver et supprimer le fichier d'échange, si vous le souhaitez.
COMPOSER_MEMORY_LIMIT=-1 composer install
Cela peut-il être fait sur n'importe quel serveur partagé sans accès root?
@Chilarai Il semble que les swapon
et swapoff
nécessitent des autorisations élevées. Donc, si vous ne pouvez pas utiliser sudo
pour ces commandes, vous ne pourrez pas le faire. Si tel est le cas, je demanderais à votre administrateur l'accès sudo
pour ces commandes.
Je me posais la question. Je pense donc que ce problème ne peut pas être résolu dans un serveur partagé à droite
@Chilarai Eh bien, quiconque gère le serveur partagé a la possibilité d'autoriser l'accès sudo à des commandes spécifiques, vous pouvez donc demander un accès sudo pour swapon
et swapoff
. Si elles ne permettent pas que la seule autre option que je peux penser est d'utiliser un autre serveur avec suffisamment de mémoire et exactement la même version de PHP pour générer le composer.lock
fichier et ensuite utiliser ce composer.lock
fichier composer install
sur le serveur partagé (la consommation de mémoire principale provient de la résolution des dépendances, qui n'est pas nécessaire avec un fichier composer.lock
).
Cela se produit en raison de la mémoire limitée allouée à PHP. Vérifiez le php.ini
Voici l'un des moyens de résoudre ce problème
php -d memory_limit=-1 /usr/local/bin/composer update
Cela m'arrive chaque fois que j'installe spatie / laravel-permission.
Des solutions pourquoi cela arrive-t-il explicitement à
spatie/laravel-permission
?Est-ce que cela répond à votre question? Composer nécessite une mémoire insuffisante. Erreur fatale PHP: taille de mémoire autorisée de 1610612736 octets épuisés