#tuningathon #4に参加しました

2位でした。ありがとうございます。お騒がせしました。

やったことはこれだけ

  • varnish導入
  • unicorn導入

varnish

default.vclはこんな感じ。 ポイントは、vcl_fetchの先頭にあるbanですな。

backend default {
  .host = "127.0.0.1";
  .port = "3001";
}
sub vcl_recv {
    if (req.restarts == 0) {
        if (req.http.x-forwarded-for) {
            set req.http.X-Forwarded-For =
                req.http.X-Forwarded-For + ", " + client.ip;
        } else {
            set req.http.X-Forwarded-For = client.ip;
        }
    }
    if (req.request != "GET" &&
      req.request != "HEAD" &&
      req.request != "PUT" &&
      req.request != "POST" &&
      req.request != "TRACE" &&
      req.request != "OPTIONS" &&
      req.request != "DELETE") {
        return (pipe);
    }
    if (req.request != "GET" && req.request != "HEAD") {
        return (pass);
    }
     if (req.http.Authorization || req.http.Cookie) {
         return (lookup);
     }
    return (lookup);
}
 
sub vcl_pipe {
    return (pipe);
}

sub vcl_pass {
    return (pass);
}

sub vcl_hash {
    hash_data(req.url);
    return (hash);
}

sub vcl_hit {
    return (deliver);
}

sub vcl_miss {
    return (fetch);
}

sub vcl_fetch {
    if (req.request == "POST") {
        ban("req.url == /blog/posts/tuningathon");
        return (deliver);
    }

set beresp.ttl = 10 s;

    if (beresp.http.Pragma ~ "no-cache"
        || req.http.Cache-Control ~ "no-cache"
        || req.http.Cache-Control ~ "private"
        ) {
                return (hit_for_pass);
        }
    if (beresp.ttl <= 0s ||
        beresp.http.Set-Cookie ||
        beresp.http.Vary == "*") {
set beresp.ttl = 10 s;
                return (hit_for_pass);
    }
    return (deliver);
}

sub vcl_deliver {
    return (deliver);
}

sub vcl_init {
        return (ok);
}

sub vcl_fini {
        return (ok);
}

varnishはyumでインストールできる3.0.2を使用。

/etc/sysconfig/varnish を編集して待ち受けポートとストレージを指定して起動するだけ。

varnish入れるだけで1000越えます。

unicorn

unicornのconfigはこんな感じ

worker_processes 4
stderr_path "/dev/null"
stdout_path "/dev/null"

こんな感じで起動します。

unicorn_rails -p 3001 -D -c /home/ec2-user/unicorn.conf

@tnmt @ijin 先生に聞いたところ、rubyのversion upやgc設定が効くもよう。

しらなんだ。4文字ID恐るべし。

まとめ

rubyまじわからん。EnterpriseEditionとかあるの知らなかったよ(´・ω・`)

そんな私がCTOをしている会社はインフラエンジニア募集中です。 チューニング力つけたい方、経験積みたい方、ビシビシしごかれたいかた、こちらからご連絡ください! →http://heartbeats.jp/recruit/


See also