2011/8/27

さくらのVPSとの格闘まとめ

WEB、10年以上やってるんですが、こと「サーバのパフォーマンス」ってほとんど門外漢だったんですよね。大規模サイトやっていた頃はほとんどサーバって別業者さんの担当だったはずですし、今の業務でもほとんどレンタルサーバばかりで、サーバ側をチューニングしなきゃいけないようなことはなかったんです。ただ、ex-expを今年の春から動かし出して、後、最近、今までの仕事とは日のアクセスが2、3桁違うであろうサイトの仕事とか通して色々教えてもらったこともあって、サーバエンジニアの人スゲーと思いつつ、いやそれ俺もわかってないと駄目だろうと思っていじってたんです。

ところがどっこい(何時代?)、ネットで検索して設定コピペするだけじゃ駄目で、駄目でというか、駄目ではないんだけど、しょっちゅうex-expは落ちるは、挙句の果てに昨日はMySQLぶっ壊すわで(朝復旧したけど)、これはきちんとある意味論理的に整理しないと駄目だなと。ざっくり言うと僕のこれまでの失敗の経緯はこんな感じです。

  1. BuddyPressを動かしたら挙動が鈍重過ぎたので、eAccelerator入れた(これはうまく行った)
  2. kosukekato.com移転したらやはり鈍重過ぎたので、php.iniやhttpd.confで設定上げてみた(この辺から怪しい)
  3. サーバ2〜3日で止まるようになってしまい、なんじゃらホイ(何時代?)と思っていたら2GBのスワップ食い潰していた
  4. 論理的に設定の意味を理解しないとこれ駄目あるね、という結論に達した

最初からサーバ構築の本でも買って、きちんと1からやってればこんなことにはならなかったはずなんですが、ググるベースでやってたら行き詰まったわけですはい。論理的、というか体系的な知識無さ過ぎ。今日ようやく512MBのメモリのVPSに、それ以上のメモリが必要になる設定をし、スワップファイルがどんどん溜まって落ちてるのね、ってことに理解が至った次第です。いやあ、何度、topって打ったことか。

この話とか多分すごくわかりやすいです。

PHPが使用する最大メモリ量は以下の式で簡単に推計することが出来ます。

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

memory_limitが16M, httpd.conf中のMaxClientsが100として計算すると、メモリ最大使用量は1.6GBとなります。以下が式です。

16MB x 100 = 1600 ≒ 1.6GB

kernelや他のサブシステム(PHP以外のapache module, SMTPサーバやOpenSSHサーバなど)も同様にメモリを使用するので、サーバには最低でも2GB程度の物理メモリを搭載する必要があるでしょう。

こういうこと、色々なところで考えないといけないわけですねえ。というわけで、僕今こんな設定にしています。

php.ini

max_execution_time = 60
max_input_time = 60
memory_limit = 16M←この辺増やして大変なことになってた

httpd.conf

StartServers 4
MinSpareServers 2
MaxSpareServers 6
MaxClients 32←この辺増やして大変なことになってた
ServerLimit 32
MaxRequestsPerChild 4000

my.cnf

[mysqld]
query_cache_limit=1M
query_cache_min_res_unit=4k
query_cache_size=24M
query_cache_type=1
key_buffer = 16M
sort_buffer_size = 1M
read_buffer_size = 256K

スワップほとんど発生してない感じなので、これで後はパフォーマンスが定常的に出るかですが、まあそこまでアクセス集中しないですからね。多分、大丈夫でしょう。

結構色々なサイト参考にさせていただいたんですが、特に役に立ったのをいくつか。

さくらのVPSのメモリ不足の確認 | 日々の出来事
PHPのメモリ割当量について | Go for it!
守破離でいこう!!: さくら VPS で WordPress のチューニング

いやあ、先は長いなあ。

ひとり仕事: フリーランスという働き方
(2012-10-5)
売り上げランキング: 14,705
100円
WordPressデザインレシピ集
狩野 祐東
技術評論社
売り上げランキング: 197,569
WordPress 高速化&スマート運用必携ガイド
こもりまさあき 岡本渉
エムディエヌコーポレーション
売り上げランキング: 435,263

加藤 康祐 / 企画・設計

1980年1月12日生まれ。フリーランス歴15年。プランナー、デザイナー。加藤康祐企画設計代表。学生時代にデザイン会社でWebデザインを経験。2005年よりフリーランスとしてキャリアスタート。これまでに個人から上場企業まで、100以上のクライアントとのプロジェクトを経験。主な仕事としてベンチャー企業でのサービスのUXデザイン、独法との防災メディアの編集・運営、社会的養護の子どもたちの自立を支援するNPOのサポート等。趣味はラグビーと料理。Keep the head up, Bind tight & Stay low.

加藤康祐企画設計

是非、フォローしてください!
Twitter / Instagram