Out of memory: Kill process エラー

Photoshoplabのサーバーにて Out of memory:エラーが発生していました。原因と対応策を考えてみます。

 Out of memory:エラーって何?

Out of memoryはメモリが足りなくなって起きるエラーみたいです。

Photoshoplabのスペック

Photoshoplabのスペックは以下のようになっております。

  • CPU:2コア
  • メモリ:1GB
  • Apache:2.4
  • PHP:5.x系

となっております。アクセスはデイリーで200もありません。1年近くこのスペックで運営してきましたが大きな問題はありませんでした。

アクセスが多くなってメモリが足りなくなった?

デイリーアクセスが1万とか2万アクセスあるなら嬉しい悲鳴でメモリあげるとか増設するとか考えますが、デイリー200もいかないサービスサイトで数ヶ月間デイリーの数は殆ど変わらずバズっている記事もないので一時的なアクセス贈もありませんので、メモリが足りなくなったと結論を出すのはちょっと違うかなと思います。

PHPのメモリ消費量が原因?

物理的なメモリ不足ではなく、サーバーの設定の問題の可能性があります。そこでPHPが使用する最大メモリ量の計算してみます。

PHPが使用する最大メモリ量は以下の式で推計します。

memory_limitの値 x httpd.confのMaxClientsの値 = メモリ最大使用量

PHPのmemory_limitとApacheのMaxClientsを調べてみます。

memory_limit = 128M

となっています。Apache2.4系のMaxClientsを調べてみましたが不明でした。どうも150っぽいですが不明なのでわかるかたは教えてください。
128M×150とすると、19200≒19.2GBとなります。

この場合は最大値が20GBになるので最低でも20GB以上のメモリが計算上必要になります。けれどPhotoshoplabはそんなにアクセスのあるサイトではありません。なのでPHPの設定を変更しました。32Mとしました。MaxClientsも20と少なくしてみたいと思います。そうすればメモリ節約にもなります。

物理メモリを超えた場合の動作

搭載された物理メモリを超えた場合、仮想メモリを使うようになってきます。これをオーバーするとメモリリークを起こすと思います。

まとめ

とりあえずメモリリークが起きないようにするのと、Apacheはメモリ解放をなかなかしないのでクーロンでも使って1時間に1回ぐらいApacheの再起動とかかかるようにしたいと思います。