AWSのEC2で、メモリリークを解決する方法

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もやったけど間に合わない!

という場合は、もう限界です。

そもそもスペックが足りていないと思いますので、部屋を広くするか(スケールアップ)、部屋数を増やしましょう(スケールアウト)。

参考↓

EC2インスタンスのスケールアップ手順

 

他にもあるよー!って人はコメントで教えてくださいー