LoginSignup
1
0

More than 3 years have passed since last update.

swapon failed: Operation not permittedと怒られた時の対処法

Last updated at Posted at 2020-03-09

状況

AWSのEC2インスタンスにLaradockを使ってLaravelのローカル開発環境を作成していた。
Laradockの環境構築が終わりdocker-compose up -d nginx mysqlでコンテナを起動。"laradock_workspace_1"にdocker-compose exec workspace bashで接続しLaravelを生成しようとしたところ以下のエラーが発生。

EC2のインスタンスタイプは"t2.micro"(RAM1GB)、AMIはAmazon Linux 2。


$ root@4e964ed4f2ce: composer create-project --prefer-dist laravel/laravel ./
Installing laravel/laravel (v7.0.0)
  - Installing laravel/laravel (v7.0.0): Downloading (100%)         
    proc_open(): fork failed - Cannot allocate memory
    The archive may contain identical file names with different capitalization (which fails on case insensitive filesystems)
    Unzip with unzip command failed, falling back to ZipArchive class
The following exception is caused by a lack of memory or swap, or not having swap configured
Check https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details

PHP Warning:  proc_open(): fork failed - Cannot allocate memory in phar:///usr/local/bin/composer/vendor/symfony/console/Application.php on line 952

Warning: proc_open(): fork failed - Cannot allocate memory in phar:///usr/local/bin/composer/vendor/symfony/console/Application.php on line 952

  [ErrorException]                                   
  proc_open(): fork failed - Cannot allocate memory  


create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--remove-vcs] [--no-install] [--ignore-platform-reqs] [--] [<package>] [<directory>] [<version>]

以前にも見たことがあったのでスワップファイルを作成しようとしたが上手くいかなかった。

起動しているコンテナはこんな感じです。


[ec2-user@ip-172-31-47-6 laradock]$ sudo docker-compose ps
           Name                          Command              State                               Ports                            
-----------------------------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1   dockerd-entrypoint.sh           Up      2375/tcp, 2376/tcp                                           
laradock_mysql_1              docker-entrypoint.sh mysqld     Up      0.0.0.0:3306->3306/tcp, 33060/tcp                            
laradock_nginx_1              /bin/bash /opt/startup.sh       Up      0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:81->81/tcp 
laradock_php-fpm_1            docker-php-entrypoint php-fpm   Up      9000/tcp                                                     
laradock_workspace_1          /sbin/my_init                   Up      0.0.0.0:2222->22/tcp, 0.0.0.0:8001->8000/tcp,                
                                                                      0.0.0.0:8080->8080/tcp                       

試してみたこと

普通にスワップファイルを作成してみる。

メモリ使用状況(MB表示)
スワップ領域は現在割り当てられていない。


$ root@4e964ed4f2ce:/var/www# free -m
              total        used        free      shared  buff/cache   available
Mem:            983         566         217           3         200         232
Swap:             0           0           0

スワップ領域用のファイルを作成

$ root@4e964ed4f2ce:/var/www# /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 14.8802 s, 72.2 MB/s

作成したswap.1というファイルをスワップ領域に設定

$ root@4e964ed4f2ce:/var/www# /sbin/mkswap /var/swap.1
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=450a4e24-3455-4466-a6e0-5daf190cdad3

スワップ領域を有効化

root@4e964ed4f2ce:/var/www# /sbin/swapon /var/swap.1
swapon: /var/swap.1: insecure permissions 0644, 0600 suggested.
swapon: /var/swap.1: swapon failed: Operation not permitted

するとswapon failed: Operation not permittedというエラーが出てスワップ領域の有効化に失敗する。
権限の問題なのでsudoをつけて試すが結果は変わらず。
dockerに載っているOSの権限設定をいじると解決するようですがあまり理解していないところをいじりたくない、、、

解決策

そもそものスワッピングの原因は物理メモリが不足していること。
スワップファイルを作成して仮想メモリ追加でどうにかするのではなくてEC2のスケールアップで対応しました。
インスタンスタイプ: t2.micro -> t2.small
1時間当たりの料金も1円程度しか変わらないので問題ないかと思います。
※リージョンはap-northeast-1a(東京)

インスタンスタイプ RAM(GB) オンラインLinux料金
t2.micro 1 0.0116 USD 1 時間あたり
t2.small 2 0.023 USD 1 時間あたり

参考にさせて頂いたページ

Laravel で Cannot allocate memory がでたときの対策
DockerのOperation not permittedというエラーに対応する

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0