Apache+Starmanの高速化
Apache+Starmanのチューニングをいろいろ試して計測してみた。
0.環境
AWS EC2 t2.micro Amazon Linux 1CPU 1GB Memory Perl v5.16.3 Apache 2.2.29 Starman 0.4011
1.実行するアプリ
hello.psgi
my $app = sub { return [ 200, [ "Content-Type", "text/plain" ], [ "Hello!" ], ]; };
$ starman --workers 64 hello.psgi
2. 測定
$ ab -n 10000 -c 100 <URL>
starmanへ直接、prefork、worker、starman --disable-keepaliveといろいろ試してみた。
[#/sec] | |
---|---|
直接 | 2343.08 |
prefork | 1573.77 |
prefork --disable-keepalive | 1256.11 |
worker | 1754.70 |
ApacheからReverseProxyするオーバヘッドがかなり大きい。 いろいろ試してみたけどなかなか数値が上がらず…。
ちなみにApacheは、できるだけプロセスのforkが少なくなるように設定した。
KeepAlive On <IfModule prefork.c> StartServers 64 MinSpareServers 64 MaxSpareServers 64 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 </IfModule> <IfModule worker.c> StartServers 16 MaxClients 256 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 10000 ServerLimit 256 </IfModule>
3. Nginxを試してみる
@hiratara also it's really a mod_proxy issue. Use real proxy like nginx :)
— Tatsuhiko Miyagawa (@miyagawa) 2010, 3月 25
ずっとApache+Starmanで考えていたけど、これを見てnginxを試してみたくなった。
location /test_tcp/ { proxy_pass http://127.0.0.1:5000/; } location /test_uds/ proxy_pass http://unix:/tmp/starman.sock:/; }
さっきと同じ条件で測定。
StamanがUnix domain socketに対応しているのでそれも試してみる。
[#/sec] | |
---|---|
TCP socket | 1703.56 |
Unix domain socket | 2132.53 |
4. 結論
Nginx+Unix domain socketが最速。
NginxとApacheの共存もできるので、Nginxをメインにするのもありかも。
d.hatena.ne.jp
このブログ記事を参考にさせてもらいました。