取势 明道 优术

作者为 扶 凯 发表

看了一下 Plack 的测试,决定自己实测一下.以前也没怎么关注过,群中近来大家关心:
最主流的目前就是 Starman ,Twiggy,和 Feersum,2013 年 4 月加入 Starlet 的测试。
启动方法:
Starman:

starman --listen :300 --workers 10  test.psgi

Twiggy:

twiggy --listen  :3000 test.psgi

Feersum:

feersum --native  --listen :3000 test.psgi

Starlet:

plackup -s Starlet -E production --max-workers=10  --max-reqs-per-child=50000 -a hello.pl -p 51

结果:

starman: 4901.93 [#/sec] (mean)
twiggy:  3774.24 [#/sec] (mean)
Feersum: 12171.39 [#/sec] (mean)
Starlet: 5090.36 [#/sec] (mean)

可以见到 Feersum 真象传说的那么强大.主要是因为它是和 Nginx 一样的架构.多进程加事件复用.这个在大量 I/O 操作和网络操作的程序中非常合适(The network I/O is done via the libev library).只是对写程序的人,有一定的要求.

另外,测试 php-fpm 的 fastcgi 的结果如下:

php-fpm: 3062.26 [#/sec] (mean)

可以见到比 PHP 的性能高很多,另外,最新的要 Starlet 性能远比 Starman 好。正常的情况下,非常建议使用这二个来做你的应用服务器,不要使用 Feersum 。这样对写程序的人员没有多少要求。直接是 Fork 模型的。另外 Starlet 可能是目前最合适使用的。因为我发现 starman 在 worker 增加的情况下性能并不会增加。
所以对于有多核多 CPU 的机器上, Starlet 处理个 3W/s 的请求很是正常。

本图来源:http://kazeburo.hatenablog.com/entry/2013/04/15/173407

注:测试是在同一台机器( 自己做桌面的笔记本 x200,开着很多程序.),使用下面的命令.

ab -c 200 -n 10000 http://127.0.0.1:5000/

测试的文件内容

my $app = sub {
    return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'Hello World' ] ];
};

来了就留个评论吧! 7个评论



    zhang 2011年12月9日 的 04:04

    我以前一直用Starman,该试试Feersum了。

    扶 凯 2011年12月12日 的 05:32

    非常有必要多玩玩这个。性能比我想象的好。

    perfi 2012年11月26日 的 14:56

    为啥用plack -D -s feersum无法实现daemonize呢

    perfi 2012年12月6日 的 02:59

    今天发现个问题,不知道是不是feersum的bug,用feersum跑psgi,客户端post数据上来的时候,while($env->{‘psgi.input’}->read($buff,1024) != 0){$post .=$buff},这个read使用有问题,当数据超过1024个字符时,会导致读取错误,$buff出现读取重复数据的情况

    perfi 2012年12月6日 的 03:16

    另外,feersum和Plack::Middle::Deflater的压缩同时使用,数据会出现异常,可能是transfer-encoding:chunk的影响,不是很清楚,

    perfi 2012年12月7日 的 07:43

    feersum 确实原生不支持,只好cpan安装完,把bin/feersum改一下才可以支持了,真麻烦。。