4
votes

Composer exécute toujours une "taille de mémoire autorisée de 1610612736 octets épuisée" - sur le serveur ainsi qu'en local

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 commentaires

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


3 Réponses :


1
votes

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


2 commentaires

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



4
votes

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


4 commentaires

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 ).



0
votes

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


0 commentaires