2月 162010
 

Apacheのチューニングでこんなページを教えてもらったのですが
微妙に違うような気がするのでメモ(解釈の違いかも)

最終回 Apacheパフォーマンス・チューニングの実践

注意が必要なのは、リクエストを処理しているプロセスは待機プロセスと呼ばない点である。
つまり、最大時にはMaxClientsとMaxSpareServersを足した数のプロセスが起動するということだ。

MaxSpareServersはあくまでも待機プロセスだと記憶してたので
こんな設定を試してみました


<IfModule prefork.c>
StartServers       8
MinSpareServers   20
MaxSpareServers   20
MaxClients       30
ServerLimit      30
MaxRequestsPerChild  4000
</IfModule>

起動時8プロセスでとりあえず20まであがる
負荷時は最大30(+親プロセス1)といった感じです
ABで多重度40で試してみたところ想定どおり31のプロセス数でした

最大時というのが曲者で
おそらく筆者はMaxClientsが十分ある環境の下で負荷+MaxSpareServersの
プロセスがあがるといいたかったのではないかと思うのですが
さっくり読んでしまうとMaxClients+MaxSpareServersが最大あがるプロセス数と勘違いしてしまうかも知れないので・・・

ちなみに聞いた話だとプロセスがあがるのはまだ無視できるけど
プロセスが死ぬときの負荷は無視できないということを聞きましたので
MinSpareServersとMaxSpareServersの値は同じにして
ピークのプロセス数あたりに合わせるといいかもしれません(未検証)

あ、自分の勘違いだったら指摘していただけるとありがたいです

参考サイト
Apache MPM prefork
Apache MPM 共通ディレクティブ


 Posted by at 2:05 AM  Tagged with:
2月 152010
 

HTTPでの要求でIMS(if-modified-since)というものがあります
ようはこんな感じのやりとりです

ブラウザ「今この日付でオブジェクトもってるんだけどこれって最新?使ってもいい?」
 (If-Modified-Since: Sun,14 Feb 2010 03:01:19 GMT)
サーバ「最新だからそれ使ってもいいよ」
 (304 Not Modified)

普通であればまったく問題ないやり取りです
ただトラフィックが非常に大きいサーバの場合深刻な問題になります
さっきのやり取りをもうちょい具体的にかくと

ブラウザ「今この日付でオブジェクトもってるんだけどこれって最新?使ってもいい?」
 (If-Modified-Since: Sun,14 Feb 2010 03:01:19 GMT)
サーバ「ちょっとまってね(HDDのファイルの更新日時を調べる・・・)最新だからそれ使ってもいいよ」
 (304 Not Modified)

もしくは

ブラウザ「今この日付でオブジェクトもってるんだけどこれって最新?使ってもいい?」
 (If-Modified-Since: Sun,14 Feb 2010 03:01:19 GMT)
サーバ「ちょっとまってね(HDDのファイルの更新日時を調べる・・・)古いからこれ使って」
 (200 OK で実ファイル転送)

いらないioが発生してしまいます
ioといってもファイルの更新日時程度なので少々ならまったく問題ないのですが非常に多いとそれだけでiowaitが大変なことに・・・
304で実ファイルは転送されないため見かけ上のトラフィックはさほど発生せずiowaitが発生してなんだろう?と悩むこともあるかも?

5/29にちょこっと修正しました(vcl_error追加)
Continue reading »


2月 102010
 

nginxでapacheで日付風のログを出力する方法がないかなぁと考えてたのでメモ程度に
logrotateを使うしかないのですが dateextオプションをつけるとlogrotateが走った日時の日付になります
結構強引ですがこうすればいけます
logrotate用の設定ファイル


/var/log/nginx/access_log {
    dateext
    rotate 365
    missingok
    postrotate
        /bin/kill -USR1 `/bin/cat /var/run/nginx.pid 2>/dev/null` 2>/dev/null || true
        /bin/mv /var/log/nginx/access_log-`date '+%Y%m%d'` /var/log/nginx/access_log.`date '+%Y%m%d' -d '1days ago'`
    endscript
}

postrotateのところでmvしてるだけですが意外と思いつかなかったのでメモ
あとnginxでrotateするときはHUPではなくてUSR1なので注意が必要です
rotateの時間は00:00ぴったりがおすすめです

参考
Gmane — Mail To News And Back Again


2月 082010
 

あんまり話題に上らないで個人的に悔しいVarnishのESI(Edge Side Include)ですが
非常に癖がありますのではまりやすいポイントをとりあえず自分用のメモ程度に

2010/06/23追記:Ver2.1.2では多少注意事項が変わっていますのでこちらも参照ください
そもそもESIってなに?

例えばTwitterのホーム画面で考えてみましょう

ページは様々な要素で構成されていますが大きく分けて二つに分かれます

表示される度に更新しなくてはいけないもの(広告・タイムライン)
表示される度に更新しなくてもいいもの(フォロワーなどの数)

別にフォロワー数を表示するためにPHPを動かして、DBかmemcacheにアクセスして整形して・・・
といった処理をしてもいいのですが
PVが多いWEBサイトの場合、毎回呼ばれる処理はできるだけしたくありません
PHP→memcacheとしても負荷が結構痛いです
そういう時にESIがあると、ページの構成要素ごと キャッシュを行い、Varnish側で組み立てて返却してくれます
PHPやDBまでアクセスがこないので負荷に強くなるとともに、そのキャッシュした構成要素を別の画面で再利用できます

PC向けの場合Ajaxなどもあるので、一概にESIがすごく有効とも言い辛いのですが(例でTwを上げましたがちょっと悪かったかも)
携帯向けなどJSが使えない環境で、毎回一枚のHTMLを出力しないといけない場合非常に効果的です
また転送速度が上がるのでPVが上がるかも しれませんしSEOにも効果がありそうです
(Googleはどれぐらいでページが表示されるかをSEOの評価としてるみたいです)

Continue reading »


2月 072010
 

今遊んでるXenServerですがブートドライブが数年前のそろそろ危なさそうなHDDだったのでSSDに換装しました
XenCenterでバックアップとっておいてそれを入れ直せばいいと思ってたのですが予想以上にハマったので作業のメモです

本当はホストバックアップだけでOKだと思ったんですがね・・・
どうもエラー吐いてうまくいかない><

Continue reading »


 Posted by at 3:49 AM  Tagged with:
2月 012010
 

めも:
物理サーバスペック
CPU Intel Core-i7 920(たまにOC)
RAM 12GB
HDD 4TB(2TBx5(RAID1+0) ARC-1680ix-12 Cache4GB)
OS Citrix XenServer5.6

論理サーバ
ゲートウェイサーバ(Nginx)
 →Cache/Webサーバ(Varnish/Nginx/FCGI)
 →FCGIサーバ(FCGI)
  →DBサーバ(MySQL)


 Posted by at 3:24 AM