2013年7月11日木曜日

AWS microでサーバ作ったときに気をつけること

  • このエントリーをはてなブックマークに追加

AWSのmicroインスタンスは時間当たりの金額が安いし、
linuxだしで中々便利なインスタンスだけれども、
メモリが613MBぐらいとメモリ量が少ないという問題を抱えていたりする。
ぶっちゃけあまり気にするほどの少なさではないけども、
でも意外と油断してしまうと的な感じの量なんじゃないかと個人的に思う。

大体microを使う理由ってサービスを新しく作ったとかそういうときや、
開発用って感じのときではあるのだけれども、
ここで気をつけておきたいのがメモリが少ないからクラッシュしやすいということ。

ということでmicroインスタンスを立ち上げたときにまず設定することを書いてみた。

■swap領域の確保
613MBで足りなくなったときに、swap領域に逃がしたい。
なのでそのためにswap領域を作ろうということ。

・手順的なもの
1)freeで現在swapが設定されているかどうかを確認

$ free
※設定したと思い込んでいたり、前に弄ってた人が作成してただろうとか思うなど、
そういうのは意外と危ないのでちゃんと確認しておくとよい。

2)ddコマンドで領域を確保
$ sudo dd if=/dev/zero of=/swap bs=1M count=1024
※ルートでないとddは使えないので注意。
面倒な人はrootになってもいいとは思うけど、ちゃんとrootにはパスワードを設定しておくべき。
あとこれ意外と時間かかるっぽいから途中でコマンド中止しないほうがいい。

3)swapする
$ sudo mkswap /swap
※もちろんこれもルート必須。
これでswap確保出来てるのでfreeしてみるとよいかと。

4)起動時にswapを常にマウントするために関連づけ
$ sudo vi /etc/fstab
/swap    none    swap    defaults    0    0  #この行を追記
※もちろんルート。
個人的にはあまり必要ないんじゃないかと思うけど、
サービス用じゃなくて開発用だとたまに止めたりするし、
再起動してみたくなることもあるからちゃんと関連づけする必要あり。

ちなみにmicroだとebsが8GBだからswapは1GBくらいがいいと思う。
なのであまりに大きくswap作るとかメモリ使いたいとかあるんだったら、
スモールインスタンスとかにするのがいいのではないかと。

〜〜〜〜2013/7/11 追記↓〜〜〜〜
そもそもmicroでswapするぐらいだったらインスタンス変更した方がよいらしい。
〜〜〜〜2013/7/11 追記↑〜〜〜〜

■php.iniにてerror_reportingの設定をチェック
これってどういうことかっていうと、
if($_GET['hoge'] == "foo"){
  //もしGETしたhogeがfooだったら的な処理
}
とかがまずいということになってしまう。
実際にはまずいわけではないけれど、Apache(httpd)のエラーログの中に、
NOTICEという形でひたすらログが貯まっていってしまう。
少しぐらいだったら問題ないけれど、ログを生成するってことはメモリ使うわけだし、
色々とあれなので公開する際にはNOTICE出さないようにしたほうがいいよ的な。

ということで対処方法としてはphp.iniのerror_reportingの設定を変更。
//php.ini
error_reporting = E_ALL | E_STRICT
↓
E_ALL & ~E_NOTICE
そもそも厳密に書けば出ないものでもあるのだけれども。

■php.iniにてtimezoneの設定
さらに意外と忘れがちなtimezoneの設定。
PHP5.3からはデフォルトは空となっており、
空になっている場合だとdate()を使った場合にWARNINGがエラーログに出てしまう。
もちろんこれもよくないのでちゃんと設定しておこう的な。
//php.ini
date.timezone = "Asia/Tokyo"


ということでこれらをやっておけば大抵の場合はメモリ切れになるとかはないわけで。
もしそれでもメモリ切れになる場合はソースの大幅な改善か、
インスタンスの容量をアップするなどがいいんじゃないかと思う。

もちろんインスタンスを立ち上げた際の初期設定はまだまだあるけどとりあえず的な。
〜〜〜〜2013/7/11 追記〜〜〜〜
ちなみに取引先がAWSのパートナーやってて、
既にここら辺について書いてある記事があった的な。
http://recipe.kc-cloud.jp/archives/304
よかったらここの記事読むと詳しく解説してあるのでおすすめ。
swap使うぐらいだったらやっぱインスタンスの容量をアップするのがいいらしい。

Adsense