EC2のメモリがいっぱいになって、動かない!
なんてこと、よくありますよね?
ね?
ハナウタで運用中のサービスでも、最近ユーザー数が伸びてきており、問題になってました。
完全とは言えませんが、一時的な対処法を紹介します。
(自分で理解するためにゴミ屋敷をイメージした例えをちょいちょい出しています)
1.メモリリークしないように作る
まぁ、これが出来たら一番良いと思います。
メモリ領域は限られているので、作業して使い終わったら片付ける、ということですね。
片付けないから部屋が散らかって足の踏み場がなくなるわけです。
やり方は色々ありますので、PHPなら「PHP メモリ解放」とかで検索しましょう。
2.メモリリークしている部分を見つけて直す
これも出来たら最高。
どのファイルが解放できてないか分かればいいのですが、プログラミングはコードやファイル同士が色々関連して成り立っているので、気合い入れて取り組まないと解決できません。
それの手助けになってくれるのが、分析ツールです。
どの部分でメモリリークを起こしているかのヒントになります。
例えば Androidなら、Android Stuidio で提供されている Memory Profiler が一般的なようです。
参考↓
3.再起動をする
ハナウタでは暫定の対処として、これをやっていました。
なぜなら作った人がもういなかったりするので、どこから直せばいいかわからない。
だったら100%になる前に0%にしちゃえー!っていう。。
でも時間がないときはこれで防ぐのが最適かと思います。
cronで1日1回再起動をしてたんですが、間に合わなくなって、1日1回→2回、2回→3回と増えていきました。
ただ、複数台構成にしていないと、サービスも止まってしまうので、ご注意を。
4.SWAPを用意してバッファーを作る
メモリが足りないときに、仮のメモリ領域みたいなのを用意してあげると、実質は2倍のメモリ領域を使えたりするそうです。(よく分かってないw 暫定的にベランダにゴミを置いておく感じかな?)
私が分かってなくても、開発者がこの記事を参考に対処をしてくれました。
参考↓
スワップファイルを使用して、Amazon EC2 インスタンスのスワップ領域としてメモリを割り当てる
5.スケールアップ or スケールアウトをする
3も4もやったけど間に合わない!
という場合は、もう限界です。
そもそもスペックが足りていないと思いますので、部屋を広くするか(スケールアップ)、部屋数を増やしましょう(スケールアウト)。
参考↓
他にもあるよー!って人はコメントで教えてくださいー