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

##AWSでの出来事_その1

とあるPHPでのプロジェクトで起きた出来事。
簡単にまとめていつでも共有できるように、とまとめ。

ちなみに、僕はサーバーやWebをメインでやっていないのでガチ素人です。
普段はアプリやゲームを書いています。

## 環境

- サーバー: AWS EC2 Amazon Linux
- DNS: Amazon Route 53
- PHP: FuelPHP 1.8-dev　  
- Webサーバー: Apache

## 詳細
新しいFuelPHPのプロジェクトをAWSにアップし、動作確認をしたかった。
そのため、git cloneからcomposer.pharのアップデートまでやる必要があったのですが、composerのアップデート時に以下のエラーが発生し、数日悩んだというお話です。

```
$ php composer.phar update
==================================
　　　　　　　　　　　　　　　　　　　　　　　　　以下 省略
==================================
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing psr/log (dev-master d8e60a5)
    Cloning d8e60a5619fff77f9669da8997697443ef1a1d7e
The following exception is caused by a lack of memory and not having swap configured

PHP Fatal error:  Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar:///______省略_______/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:974
Stack trace:
#0 [internal function]: ______省略_______
#1 ______省略_______
#2 ______省略_______
#3 ______省略_______
#4 ______省略_______

Fatal error: Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in ______省略_______
Stack trace:
#0 [internal function]: ______省略_______
#1 ______省略_______
#2 ______省略_______
#3 ______省略_______
#4 ______省略_______


$ php composer.phar update ← 2度目以降

Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing psr/log (dev-master d8e60a5)
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:///______省略_______/composer.phar/vendor/symfony/console/Application.php on line 954

Warning: proc_open(): fork failed - Cannot allocate memory in phar:///______省略_______/composer.phar/vendor/symfony/console/Application.php on line 954
                                                     
  [ErrorException]                                   
  proc_open(): fork failed - Cannot allocate memory  　　　　　← ここが重要!!
                                                     

update [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--lock] [--no-custom-installers] [--no-autoloader] [--no-scripts] [--no-progress] [--no-suggest] [--with-dependencies] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [-i|--interactive] [--root-reqs] [--] [<packages>]...

```

　  
上記のコマンドの結果でその後はずっと【[ErrorException] proc_open(): fork failed - Cannot allocate memory】が発生。
この時は、どうすることもできなかった...
　  
composer.phar updateの前にcomposer.phar self-updateもやってます。
その前には、git submodule initとgit submodule updateもやっているのでいつも通りの作業で急にこいつの時だけ起きた現象でした。

## 原因
唯一、このプロジェクトのみ他プロジェクトで違う点がありました。
　  
それは、DNSの設定を先に作業したことです。
AWSのRoute53を先に設定した後にgit cloneして作業しておりました。

## 結論
git cloneしたプロジェクトを一旦削除し、Route53の設定も一度削除。
　　  
再度初めにgit cloneから作業を始め、FuelPHPの初期設定を行い、その後Apacheの設定。
最後にDNSの設定を終え、無事今回の問題は解決しました。

## まとめ
サーバーにPHPプロジェクトをアップする時は順序が少し違うことでいつも通りの作業がうまくいかないことがある。
特に素人や初心者はよくやることだと思うので、誰もが通る道かと思います。

今回のエラー内容は、おそらくFuelPHPのプロジェクトに関わらず、WebまたはAPIの構築時、
環境を整える順番やインストールまたはアップデートする内容などが本当にあっているのか確認することだと思います。



以上です。