skillup

技術ブログ

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

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

投稿日:2019年2月23日 更新日:

先日、あるサーバーで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
    一般のcomposerコマンドですと以下のようになります。

    php -d memory_limit=-1 /usr/bin/composer require aws/aws-sdk-php

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

スワップ割り当て

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

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

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

参考リンク

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

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

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

執筆者:


comment

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

関連記事

no image

ansible localでの使用,sudoに関して

最近継続的に調査しているansibleについて Contents1 local2 sudo local ansibleは通常別のホストに対して行うものですが、 hostsファイルのIPを変更し、以下の …

no image

サーバー設定ファイルについて apache

以前から気になっていたサーバーの設定ファイルに関しての疑問について調査。 本日はapacheについて学習しようと思います。 通常のapacheの設定ファイルは[crayon-6621c208994f2 …

no image

vagrantでの静的ファイルのキャッシュがクリアされない

タイトルのまんまですが、vagrantでapacheを使ってまして、静的ファイルのキャッシュがクリアされないと言う問題が発生しました。 vagrantは結構長い間使ってましたが、今まで素のhtmlを書 …

no image

PHPでのスクレイピング

本日はPHPスクレイピングについて。 スクレイピング自体はRuby、Javaとやってきました。 PHPに関しては昔、正規表現でごりごりやってましたね。これを使えば何でもできるんで一番早いです。 が・・ …

no image

ログ抽出コマンド特集 その3 データの収集や抽出にかかわるコマンド群(sort ,tr,cut)

サーバーの負荷を見る場合、unixコマンドでログを抽出できたりすると何かと便利です。 いままでも下記の記事でこれらの出力を行いました。 ログ抽出コマンド特集 その1 cat+grep+sort 私が本 …

アーカイブ