python web服务器性能,pythonwebserver服务器性能对比

因为换了nginx就不再使用mod_wsgi来跑web.py应用了,现在用的是gevent-wsgi,效果还不错。但还是想试试别的,比如传说中超级猛的meinheld什么的。 软硬件环境

硬件:

一台04年初购置的IBM X235服务器,CPU为Xeon 2.4G两颗,内存1G,100M网卡。

软件:

Ubuntu Server 10.04 LTS

Apache 2.2.14

Nginx 0.7.65

Python 2.6.5

web.py 0.37

mako 0.7.2

sqlalchemy 0.7.8

gevent 0.13.7

gunicorn 0.14.6

meinheld 0.4.15 测试代码

有五个版本,分别是:

最基本的WSGI helloworld def application(environ, start_response):

status = '200 OK'

resp = "Hello world!"

resp_headers = [('Content-type','text/plain;charset=utf-8')]

start_response(status, resp_headers)

return [resp]

最基本的web.py your IP class yourip:

def GET(self):

return "Your IP is : %s" % web.ctx.ip

加了mako模板的web.py class onlymako(BaseHandler):

@expose("yourip")

def GET(self):

return dict(yourip=web.ctx.ip)

加了数据库的web.py class onlydb:

def GET(self):

created = web.ctx.provider.once_access(web.ctx.ip)

return "You have logged : %s" % created

和同时加了数据库和mako模板的web.py —— 这也是最接近实际应用的情况 class makodb(BaseHandler):

@expose("index")

def GET(self):

created = web.ctx.provider.once_access(web.ctx.ip)

return dict(created=created)

测试目标

五种运行环境:

web.py的测试环境app.run

web.py+gevent-WSGI

gunicorn默认(sync)

gunicorn+gevent

gunicorn+meinheld

gunicorn使用 -w 4 参数,经实际比较过,这个参数并不能有效增加rps,但在高并发测试情况下可以在一定程度上减少失败率。 测试方式

ApacheBench 2.3(Ubuntu Desktop 12.04)

RPS测试参数为 -n 200 -c 22 测五次取rps平均值。

之所以用这样比较小的参数,是因为再高了,其中某些测试就通不过了。 测试结果 RPS测试 WSGI helloworld Web.py YourIP Web.py+Mako Web.py

+SQLAlchemy

(SQLite) Web.py+Mako

+SQLAlchemy

(SQLite) Web.py

+SQLAlchemy

(Postgresql) Web.py+Mako

+SQLAlchemy

(Postgresql) Web.py app.run 无 130 93 75* 45* 59 40

web.py+gevent 无 422 130 82 54 74 53

gunicorn default 854 439 136 93 66 90 62

gunicorn+gevent 695 291 115 74 56 78 56

gunicorn+meinheld 3565 682 160 84 65 98 64

其中加了“*”的数字发生了数据库错误,仅供参考。

另外,用同样的参数测了一下Apache2处理静态文件的rps为:1780,nginx为:2951。

===附加的分割线===

再附加一个在我的Atom小服务器上的部分测试结果:

Nginx处理静态文件的rps为:4000左右。

WSGI hello world测试:gunicorn+meinheld约为:3800。gunicorn+gevent约为:1100。gunicorn default约为:1400。

your IP测试:gunicorn+meinheld约为:1000。gunicorn+gevent约为:450。gunicorn default约为:700。

相比之下这个Atom小机器比IBM服务器猛好多。硬件发展速度真是太快了。

附软硬件环境:

Atom D525 1.6G双核,2GRAM,FreeBSD 9,Nginx 1.2.2,Python 2.7.3,其它同IBM服务器。

并且在这个Atom机器上 -w 参数对rps有明显贡献…看来是因为老服务器的问题才效果不明显,只是不确定是硬件问题还是OS问题。 结论

meinheld的确猛,处理最简单的WSGI比Apache2处理静态文件还要猛一倍,跟Nginx相当甚至更强。

app.run的rps比预想的要好很多,只是并发数真不行,-c 参数略加大就会出现大量失败测试。

gevent已经足够好了,不过居然比gunicorn的sync模式还慢真是有点不科学啊。

gunicorn的好处在于管理方便,并且可以灵活使用各种work_class,特别奇怪的一点是居然sync模式也这么快。

web.py的性能影响还是很明显的。

模板的影响也很明显——mako已经算是很快的模板了,真不知道用那些KID之类很慢的模板会是什么效果。

数据库的影响更大,不过pgsql的性能居然能跟sqlite差不多,真不知道是sqlite太慢还是pgsql太快…

本来前一阵我刚听说OpenResty这货的时候还是很有兴趣的,但是现在看到meinheld的表现以后,觉得还是算了吧,毕竟用OpenResty还要去学Lua…现在要学的东西太多,能用Python搞定的事情就不去麻烦Lua了。 内容推荐:免费高清PNG素材下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值