お名前.comのVPS(Virtual Private Server)には、なんと、メモリが足りなくなったときに使用されるスワップ領域がまったくないようです。
(画像はまったく関係なし。)
Swapがないなんて
これはどういうことかというと、普通のLinuxサーバーならば、一時的にWebのアクセスが増えてメモリが足りなくなっても、ハードディスクのSwap領域にメモリの内容を待避させて、なんとか遅くなりながらも対処してくれるけれども、お名前.comでは、そうはならないということです。
普通のLinuxサーバーだとメモリもSwap領域も足りなかったら、サーバー自体が落ちると思います。
お名前.comの場合はというと、基本のメモリが512MBで、物理サーバーリソースに余裕があれば最大で1GB割り当てられるとなっています。これがたぶん、Swap領域がないことをフォローするための仕様なのでしょう。瞬間風速的にアクセスが増えても、物理サーバーリソースに余裕があればメモリが割り当てられ、仮想サーバーが完全停止するのを防いでいるのでしょう・・・・たぶん。
ただ、前も書きましたが、512MB以上メモリを使った時にリソースに空きがないとhttpdを勝手に落とされてしまうので、仮想サーバーが止まってなくても、Webは停止してしまうので、微妙です。
結局、Apacheの一つずつのプロセスがどれぐらいメモリ消費するか見て、最大接続数(MaxClient)と待機プロセス数(MaxSphere)を決めないと、いけない。
(ちなみに、MaxSphereはリクエストを処理しているプロセスは含まないので、最悪MaxClient+MaxSphere分メモリ消費するとどこかで見たけどほんと?)
結局メモリ増設
そんなこといっても、MySQLとかも立ち上げているので、正確に見積もるのはむずかしい。
MaxClient5のMaxSphere1でも落ちるので、結局めんどくさくなって、お名前.comのメモリ追加サービスを契約してしまいました。
月額1,050円も痛いが、初期で3,150円かかるのが、Amazon EC2なんかのクラウドと比べると、なんだかなぁという感じ。
Apache以外だと多めに見て300MBぐらい使ってそうなので、残りは700MB。Apacheの1プロセス60MBぐらいくってそうなので、700MB/60MBで最大でも10プロセスまでしか立ち上がらないように、MaxClientとMaxShpere5にした。
少しでも1GB超えると即サービス停止になっちゃうので、相当余裕持たせておかないと駄目なんだよな。もったいない。
あと、使わないであろうapacheのモジュールを読み込まないようにした。若干プロセスの消費メモリが少なくなったような気がする。
これで一週間以上運営してるが、時々読み込みにひっかかる現象は見られるようになったけど、httpdが落ちたりはしていない。
Amazon EC2 Micro Instance(マイクロインスタンス)
しかし、オプションつけたおかげで、月額が4,000円程度になってしまった。一年のまとめ払いしているので、正確には3,728円だ。これでも、Amazon EC2よりはだいぶ安いか、なーんて思ってたら、AmazonでMicro Instanceというサービスが追加されました。
Amazon Elastic Compute Cloud (Amazon EC2)
Micro InstancesInstances of this family provide a small amount of consistent CPU resources and allow you to burst CPU capacity when additional cycles are available. They are well suited for lower throughput applications and web sites that consume significant compute cycles periodically.
- Micro Instance 613 MB of memory, up to 2 ECUs (for short periodic bursts), EBS storage only, 32-bit or 64-bit platform
こちら、一時間の利用で$0.02なので、ドルの値段が戻って95円換算になったとしても、一時間1.9円。一日で、45.6円、一ヶ月で、1,368円。メモリは613MBというなんか中途半端な容量だけど、たぶんSwap使えるはずだから、うちぐらいのサイトならなんとかなるはず(よく調べてないです。自分で調べてね)。
Microinstanceにはディスクがついてこないので、Amazon EBSという従量課金のディスクをつかわないといけない。
Amazon Elastic Block Storage (EBS)
Amazon Elastic Block Store なら使った分だけの支払いです。ボリュームストレージは、割り当てた量をリリースするまでで課金されます。料金は、割り当てた1GBごとに毎月 $0.10、Amazon EBSでは、ボリューム作成用入出力要求 100万回ごとに $0.10 です。
今、うちのサイトはトータルで、バックアップとか入れても12GBぐらいしかデータ無くて、ページビューも月2万ぐらい。1ページ50個もパーツはないけど、50リクエストあるとすると、100万リクエスト。
12(GB) * $0.1 = 114円
100万リクエスト = 9円ぐらい
つまりストレージで123円。となると、インスタンスの1,368円と足すと、アメリカが強いアメリカに戻っても、
1,491円!
弱いアメリカのままで85円換算だと、1,334円ですよ。
お名前の方が120GBのハードディスクがついているので、それと同じだけディスク使ったとしても、2,517円。
あれ?!これはお名前.comを使う理由なんて一つもなくなてしまったじゃないか。
あぁ、お名前.com長期契約なんてしなければ良かった・・・。
[2011/09/06追記]
EBSのI/Oリクエスト数を少なく見積もりすぎてました。
実際は、5,700万I/O発生しているので、それだけで、1$85円換算で554円かかってます。
試しにI/O負荷が高そうなバッチによるバックアップを止めてEBSのスナップショットで運用するようにしてみた。どれだけ変わるかな・・・。
ディスクは結局16GBでもあまりまくっていて、162円(これは16GB確保したらいくら使用量が少なくても固定でかかる)
データ転送量は11GBで、191円。
結果、1603円なり(2011年8月実績)