debiancdn

AWS, Content Delivery Network and Debian

カテゴリーアーカイブ: apache

httperfでmathopdがapacheよりどれだけ速いかを見る.

こないだの記事さいしょからはいっているhttpdではだめなんですか,というpManさんの指摘ももっともだと思うので,かいてみる.

以下2つでの比較.

  • mathopd @1.5p4
  • Apache/2.2.11 (Unix)

環境はiMac24(early 2008),メモリ4G.

httperfはこうやってみた結果.

 $ httperf --server localhost --port 80 --uri /hoge.txt --rate 1000 --num-conn 10000 --num-call 100

以下続きを見るのが面倒なひとのためのサマリ.

  • mathopd :Connection rate: 961.2 conn/s

    • しかもプロセスは1つ.プロセスサイズは1020KBほど.

  • apache: Connection rate: 25.1 conn/s

    • プロセスサイズは1.58MBだが,それがずらっとならぶ.

プロセスの絵は,ベンチ終了後のもの.apacheはprefork mpmでMaxSpareServersは10.

apache

Total: connections 1907 requests 95177 replies 94300 test-duration 75.894 s
Connection rate: 25.1 conn/s (39.8 ms/conn, <=1022 concurrent connections)
Connection time [ms]: min 105.0 avg 3108.5 max 19149.9 median 2806.5 stddev 2131.9
Connection time [ms]: connect 1893.5
Connection length [replies/conn]: 100.000
Request rate: 1254.1 req/s (0.8 ms/req)
Request size [B]: 70.0
Reply rate [replies/s]: min 0.0 avg 1257.4 max 8263.3 stddev 2680.7 (15 samples)
Reply time [ms]: response 24.1 transfer 0.0
Reply size [B]: header 268.0 content 5.0 footer 0.0 (total 273.0)
Reply status: 1xx=0 2xx=94300 3xx=0 4xx=0 5xx=0
CPU time [s]: user 0.81 system 67.61 (user 1.1% system 89.1% total 90.1%)
Net I/O: 417.0 KB/s (3.4*10^6 bps)
Errors: total 9057 client-timo 0 socket-timo 0 connrefused 0 connreset 964
Errors: fd-unavail 8093 addrunavail 0 ftab-full 0 other 0

mathopd

Total: connections 10000 requests 139707 replies 129780 test-duration 10.403 s
Connection rate: 961.2 conn/s (1.0 ms/conn, <=122 concurrent connections)
Connection time [ms]: min 7.2 avg 75.8 max 515.9 median 53.5 stddev 70.6
Connection time [ms]: connect 0.4
Connection length [replies/conn]: 14.444
Request rate: 13429.3 req/s (0.1 ms/req)
Request size [B]: 70.0
Reply rate [replies/s]: min 11790.4 avg 12394.0 max 12997.6 stddev 853.6 (2 samples)
Reply time [ms]: response 4.9 transfer 0.0
Reply size [B]: header 170.0 content 5.0 footer 0.0 (total 175.0)
Reply status: 1xx=0 2xx=129780 3xx=0 4xx=0 5xx=0
CPU time [s]: user 0.89 system 6.74 (user 8.6% system 64.8% total 73.4%)
Net I/O: 3050.0 KB/s (25.0*10^6 bps)
Errors: total 9927 client-timo 0 socket-timo 0 connrefused 0 connreset 9927
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0

広告

いろんな作業のためにPHP rails mod_proxy…

とある目的でPHPで構築されていたwebを徐々にrailsにかえていくというミッションをやっている.

  • プランA: 現pageのphpファイルをRAILS_ROOT/public以下にcopyし,phpとfcgiを両方動作させる方法.この問題点はphpとfcgiの両方動作させることができるか未知数なところ
  • プランB: 現pageのPHPはdynamicなpage生成につかわれているわけではないのでphpのレンダリング結果をどうにかして全部RAILS_ROOT/public以下に展開する.wgetかなんかすれば全部つくれるとは思うけど,ちょっとでかいかもしれない.
  • プランC: 現pageとは別の11011で別途はしらせたまま11011にmod_proxyする.安定性が問題かも.

まあ個人的にはA,B,Cの順に綺麗な解だと思っているが,どの方法にも一長一短がある.結局いろいろやったところAの方法で.

けっきょく RAILS_ROOT/public/.htaccessをこんなかんじにした.

AddHandler fcgid-script .fcgi
AddHandler cgi-script .cgi
Options +FollowSymLinks +ExecCGI -Indexes
DirectoryIndex index.cgi index.html index.shtml index.php

RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ $1/ [R]

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} \.php
RewriteRule ^(.*)$ $1 [QSA,L]

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME}/index.html -f
RewriteRule ^(.*)$ $1/index.html [QSA,L]

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME}/index.php -f
RewriteRule ^(.*)$ $1/index.php [QSA,L]

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ $1 [QSA,L]

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^(publications|admin/.*)/?$ dispatch.fcgi [QSA,L]

この最終行がちょっと気にいらないところで,けっきょくこう書かないとPHPとの共存ができないかなしいことに.

RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

にしてしまうとなぜか[L]が効かず,PHPのほうまでこの行が有効になってしまうのでありました.

とりあえずこれ以上の深追いはしないことにした.

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

apache2.2でのNTLM認証設定

ちょっとはまったのでメモ。まあ

  • aprがちょっとかわってたのと、
  • apxs2をつかうようにするだけのこと

NTLM auth module for Apache/Unixをみりゃすぐできるかなと思ったのだが、そうでもなかった。

まずはapxs2をつかえるようにdev関係をいれる。次にsvnでソースとってくる。

 svn co https://modntlm.svn.sourceforge.net/svnroot/modntlm/trunk

ちょっと修正。

Index: mod_ntlm.c
===================================================================
--- mod_ntlm.c  (リビジョン 45)
+++ mod_ntlm.c  (作業コピー)
@@ -673,7 +673,8 @@
         return NULL;
     }
 
-    apr_pool_sub_make(&sp,p,NULL);
+    // apr_pool_sub_make(&sp,p,NULL);
+    apr_pool_create_ex(&sp,p,NULL,NULL);
 
     while (!(ap_cfg_getline(l, MAX_STRING_LEN, f))) {
         if ((l[0] == '#') || (!l[0]))

apxs2 -i -a -c mod_ntlm.c

echo "LoadModule ntlm_module /usr/lib/apache2/modules/mod_ntlm.so"> /etc/apache2/mods-available/ntlm.load

a2enmod ntlm

設定はまあ

<Location />
AuthType NTLM
NTLMAuth on
NTLMAuthoritative on
NTLMDomain ドメイン
NTLMServer サーバ.ドメイン
NTLMBackup バックアップ.ドメイン
Require valid-user
</Location>

というかんじで。

http://www.enhydra.org enhydra3がでた

mod_rewrite

改造するついでに、というか改造したのだが、
rewritelog(r, num, char *format, ..)の形式は便利だ。
あとはlog levelをどう設定するかが肝心か。

ErrorDocument

アパッチ的便利できるかも、認証deny(401)のとき

 ErroDocument 401 filename

としておけば、OK.

mod_perlとhns2がうまくいかん。

メモリが足らんとかいわれちゃうらしい。

む、mod_rewrite〜

さすがにmod_aliasよりかなり多機能。でもやっぱり無改造ではいけそうにないなあ。

直接は無関係だけど、
mod_rewriteで環境変数ってほんとうに設定できるのかな?
環境変数を表示させるCGIをたたいてみようとしたけど、どうにもうまくない。