nginx + uwsgi + flask 性能测试

2014-08-07 11:48:49 +08:00
 hydrazt
在一台4核2cpu,16G内存的服务器上做了个测试

1. 直接通过nginx访问一个1k大小的文件,能处理13000req/s
2. 通过nginx代理到uwsgi,访问flask的static文件,也是1k大小,能处理3000req/s

性能差了4倍,访问同样的文件,方法2多走了一层uwsgi,性能差距能有4倍吗?

测试时nginx,uwsgi都是8process的
8447 次点击
所在节点    Python
17 条回复
tanywei
2014-08-07 11:56:44 +08:00
nginx本来就是干静态的料吧
passluo
2014-08-07 11:59:31 +08:00
send_from_directory() ?
datou552211
2014-08-07 12:03:04 +08:00
你连动态性能都没测
hydrazt
2014-08-07 12:10:17 +08:00
@tanywei 性能上有区别时意料中的,但是4倍,表示有些惊讶

@datou552211
也做了动态的测试

1. nginx + uwsgi + flask + mongodb 测试的网页需要到mongodb中获取数据,页面大概6k, 只能处理300req/s

2. nginx + uwsgi + flask + flask-redis + mongodb flask-redis 对flask的页面做了类似 varnish的cache, 性能直接从300req/s 增加到 3000req/s

考虑到flask-redis是在uwsgi后端的,如果使用varnish,且放在nginx 和 uwsgi之间,估计能处理10000req/s
hydrazt
2014-08-07 12:11:51 +08:00
@passluo 没有使用send_from_directory, 测试文件直接放到project/static/目录中,测试时直接时http://xxx.com/static/test.file
zjgood
2014-08-07 12:13:15 +08:00
@hydrazt 我觉得前端就放一个varnish就够了,然后设置好各种刷新缓存的例外情况,如admin登陆,提交评论。后端标准lnmp或者lamp,这样不折腾
hydrazt
2014-08-07 12:16:05 +08:00
@zjgood 性能没遇到瓶颈,flask-redis相当简单,就没上varnish了,打算有时间再说了
还是很想问问 uwsgi对性能的影响
lj0014
2014-08-07 12:18:08 +08:00
有试下把uwsgi再多开几个吗
hydrazt
2014-08-07 12:19:56 +08:00
@lj0014 没有试过,uwsgi使用的是多进程模式,多跑几个uwsgi感觉没有什么用
est
2014-08-07 12:22:34 +08:00
呵呵。
lianghui
2014-08-07 12:27:16 +08:00
你敢在裹一个https么,不keep-alive 请相信80req/s很正常
hydrazt
2014-08-07 13:04:11 +08:00
@lianghui nginx + uwsgi + flask + mongodb 这个结构已经很简单了啊
lj0014
2014-08-07 13:08:48 +08:00
@hydrazt 可试下多开uwsgi实例,uwsgi的队列可能会成为瓶颈
hydrazt
2014-08-07 13:44:25 +08:00
@lj0014 之前使用1个uwsgi -M -p 8的参数,修改为4个uwsgi -M -p 4后,处理能力从3000req/s 提高到 5500 req/s了, 有意思啊
KDr2
2014-08-07 16:01:35 +08:00
nginx 静态文件 主要是 sendfile 立功了吧。
hydrazt
2014-08-07 18:27:55 +08:00
@lj0014 重新测试了一下,之前的测试是有问题的,uwsgi启动的时候,我将log直接在console上输出了,压测的时候会有大量的打印输出,影响了测试结果。

把输出重定向到文件后,单个uwsgi -M -p 8的处理能力已经达到6700req/s, 相比nginx直接提供服务的13000req/s,算是合理的结果了。

之前单个uwsgi和4个uwsgi测试出来的处理能力不同,应该也是和大量输出log有关的,4个uwsgi的话,有4个uwsgi主进程,打印输出可以同时使用到4个cpu的中断,性能上相比单个uwsgi好,也解释的通了。
NCE
2014-09-16 13:16:50 +08:00
add tornado.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/126550

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX