起きたこと
Dockerコンテナ上のComposerでパッケージを追加しようとした時にCannot allocate memory
エラーが出た。
[root@8b736af411ab www]# composer require --dev squizlabs/php_codesniffer mmap() failed: [12] Cannot allocate memory mmap() failed: [12] Cannot allocate memory [05-Oct-2021 13:52:53 Asia/Tokyo] PHP Fatal error: Out of memory (allocated 52035584) (tried to allocate 147456 bytes) in phar:///usr/local/bin/composer/src/Composer/Json/JsonFile.php on line 275 Fatal error: Out of memory (allocated 52035584) (tried to allocate 147456 bytes) in phar:///usr/local/bin/composer/src/Composer/Json/JsonFile.php on line 275
答え
Docker Desktopのバージョンが3.3.1だったため、メモリリークの問題を抱えていた。 Docker Desktopを最新の4.1.0にしたら解決した。
[root@8b736af411ab www]# COMPOSER_MEMORY_LIMIT=-1 $(which composer) require --dev squizlabs/php_codesniffer -vvv --profile ~~~~ Package manifest generated successfully. [836.4MiB/141.24s] Memory usage: 836.45MiB (peak: 1457.58MiB), time: 141.24s
模索した様子(全部ダメ)
memory_limitを上げてみた
[root@8b736af411ab www]# php -i | grep memory_limit memory_limit => -1 => -1
[root@8b736af411ab www]# composer require --dev squizlabs/php_codesniffer ~~ mmap() failed: [12] Cannot allocate memory mmap() failed: [12] Cannot allocate memory
( 'ᾥ' )ダメ
composerコマンド実行時にmemory_limit=-1を明示した
[root@8b736af411ab www]# php -d memory_limit=-1 $(which composer) require --dev --with-all-dependencies squizlabs/php_codesniffer -vvv --profile ~~ mmap() failed: [12] Cannot allocate memory mmap() failed: [12] Cannot allocate memory
( 'ᾥ' )ダメ
[root@8b736af411ab www]# COMPOSER_MEMORY_LIMIT=-1 $(which composer) require --dev --with-all-dependencies squizlabs/php_codesniffer -vvv --profile ~~ mmap() failed: [12] Cannot allocate memory mmap() failed: [12] Cannot allocate memory
( 'ᾥ' )ダメ
コンテナが使えるメモリ・swap領域を増やしてみた
[root@c9f8af0c1933 www]# free -m total used free shared buff/cache available Mem: 15987 773 13591 395 1622 14587 Swap: 4095 0 4095
[root@8b736af411ab www]# composer require --dev squizlabs/php_codesniffer ~~ mmap() failed: [12] Cannot allocate memory mmap() failed: [12] Cannot allocate memory
( 'ᾥ' )ダメ