有关 tornado 的 QPS 问题。

2017-09-15 15:31:46 +08:00
 keysona
机子:  1c 2g hdd 硬盘

python: 3.5.3

必要的 redis 和 mysql 都跑在同在一台机子上

今天用 ab 测试了一个登陆接口,分别进行 3 个数据库操作: select, replace, update ;最后会将产生的 token 扔进 redis 里。

数据库操作用了 tormysql,redis 直接是官方库,没有使用异步操作。

测试结果让我有点不可思议,居然才 30 - 35 QPS。

单纯测试 hello world,大概是 1000 左右。

不知道这个结果是否正常?

2397 次点击
所在节点    Python
15 条回复
zhoubug
2017-09-15 15:43:55 +08:00
是否异步 数据索引等是否处理好?
这两点是单进程性能的关键点 另外就是正式部署一般是 nginx +多个 tornado 这样才能算是测试出
单机的真正的服务能力,如果和其他语言 web 框架对比 合适的数据还是应该要累加下多个进程总共的 QPS。
keysona
2017-09-15 15:56:24 +08:00
@zhoubug

数据库都建索引了。数据库的每个操作在 0.002 秒。

除了 redis 这块,其他都异步了。这里只放 token 的登陆信息。

测试时,只跑了一个 tornado 进程。

开两个的话,能到 50 左右。
pynix
2017-09-15 16:24:04 +08:00
应该是哪里阻塞了,同步框架也能随便达到这个 QPS
keysona
2017-09-15 16:24:54 +08:00
@zhoubug

把一个 5 秒的 timer 关了之后。

单进程的 tornado 去到了 50qps。

然后之前没有看清楚,发现数据库的操作要花 200 毫秒了....

平均每个请求 500-600 毫秒。

看来瓶颈应该是数据库了。
owenliang
2017-09-15 16:28:50 +08:00
单线程操作数据库,IO 同步,不卡才怪?
keysona
2017-09-15 16:32:44 +08:00
@owenliang

大哥,tormysql 是异步库。

内部实现貌似是用 greenlet 去执行数据库操作。
owenliang
2017-09-15 16:36:47 +08:00
@keysona 如果 mysql 是异步 IO 了,那我认为你应该优先怀疑你的测试方法,串行测试 QPS 取决于访问 mysql 的往返延迟,你应该用并行请求才对。
keysona
2017-09-15 16:43:14 +08:00
@owenliang

是的,应该是我测试方法错了。

用同一个账号登陆的。

发现更新这个账号的信息是最耗时的。
junneyang
2017-09-15 16:52:38 +08:00
python 搞高性能、高并发本来就不行,要是再加个锁之类那就更玩完儿了
SoulSleep
2017-09-15 17:00:28 +08:00
登录测试用不同账号试试,用同一个账号小心交叉锁
sunmonster
2017-09-15 17:16:56 +08:00
这个配置,hello world 才 1000 ?有点底呀
keysona
2017-09-15 17:21:47 +08:00
@sunmonster

我也觉得....
janxin
2017-09-15 17:49:47 +08:00
Hello world 级别的 Benchmark 直接看 https://www.techempower.com/benchmarks/#section=data-r14&hw=ph&test=plaintext 这种就好了

这种 QPS 低只有卡在数据库上了。redis 官方库可以用 pool,那个 mysql 库就没用过了
sujin190
2017-09-15 22:11:44 +08:00
tormysql 有使用连接池么?可以看下 MySQL 的 cpu 消耗
keysona
2017-09-15 23:08:14 +08:00
@sujin190

已经用了连接池,最大链接是 60。

replace 以及 update 两条语句都用了不同的事务去执行。

发现用事务执行的语句消耗的时间都比较长。

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

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

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

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

© 2021 V2EX