skillup

技術ブログ

PHP サーバー・ネットワーク

メモリー不足でのスワップ割り当て

投稿日:

先日、あるサーバーでcomposerをinstallしようとしたところ、
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

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

のようなエラーが出ました。要はメモリ不足ですね。

AWS(EC2)だったんですが、どうやらmicroだったようで、メモリも2Gしかないようです。

PHPのメモリーがらみ制限

PHPに割り当てるメモリの解放です。

その前にPHPに割り当てるメモリを測定してみましょう。
php -r 'phpinfo();' | grep memory_limit
でPHPに割り当てられてるメモリを測定できます。

んで、こっからの対処法は以下のような感じでしょう。

  1. php.iniそのものをいじってmemory_limitをあげる
    一番クリティカルでサーバー内全体に影響が出ます。
  2. ini_set(‘memory_limit’ ‘xxxxm’)
    そのプログラム単体でのメモリ使用量のコントロールです。
  3. 下記のようなコマンドでコマンド実行時に一時的に割り当てることができます。
    php -d memory_limit=-1 /usr/local/src/composer.phar install

*ちなみに-1と設定するとメモリ上限が上限なしになります。

スワップ割り当て

ところが今回のケースでは上記の方法では解決できませんでした。どうやら根本的にメモリ不足らしく色々調べたところスワップ領域を作成すれば良いとのこと。

下記コマンドで1G分のスワップを割り当てて無事解決できました。

こういうのってOSインストール実行時にやるもので、そんなことが可能なのか?と思いましたが、コマンドでできるんですね・・・

参考リンク

composer updateがPHPのメモリ制限に引っかかってできない時

Composerでメモリエラーが発生したときの対処方法【詳細解説】

-PHP, サーバー・ネットワーク
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

vimの基本的な使い方 設定ファイル、基本コマンド他

もう4年ぐらいの付き合いになる憎らしくもかわいいエディタvi(vim)について。 雑誌に特集があったのでこれを機にまとめてみました。シリーズものになるかも・・・ Contents1 Vi(vim)とは …

no image

sourceコマンドに関して(Linuxサーバー&MySQL)

Linux上ではコマンドをテキストファイルに記述して、

と入力すると命令を実行してくれます。 シェルスクリプトよりもお手軽に実行できる …

no image

inotifyによる検知

以前、pynotifyというpythonの検知プログラムを書きましたが、元々はinotifyというLinux上のパッケージのライブラリが元になっています。 以前調べたリンク 監視検知処理に関して 実務 …

no image

Cakeの共通処理

CakePHPだけに限りませんが、フレームワークの場合、オブジェクト指向の特徴を理解して、全ページに共通な処理などは個々のコントローラーに書くのではなく、もっと抽象度の高いクラスに書いたほうが保守性が …

no image

自力での監視

Zabbixの勉強を進めていますが、マニュアル通りに設定していて、中で何をやっているかをあまり理解していなかったりします。 それだとちょっとまずいのでZabbixでの構築とともに自力での監視スクリプト …