机子: 1c 2g hdd 硬盘
python: 3.5.3
必要的 redis 和 mysql 都跑在同在一台机子上
今天用 ab 测试了一个登陆接口,分别进行 3 个数据库操作: select, replace, update ;最后会将产生的 token 扔进 redis 里。
数据库操作用了 tormysql,redis 直接是官方库,没有使用异步操作。
测试结果让我有点不可思议,居然才 30 - 35 QPS。
单纯测试 hello world,大概是 1000 左右。
不知道这个结果是否正常?
1
zhoubug 2017-09-15 15:43:55 +08:00
是否异步 数据索引等是否处理好?
这两点是单进程性能的关键点 另外就是正式部署一般是 nginx +多个 tornado 这样才能算是测试出 单机的真正的服务能力,如果和其他语言 web 框架对比 合适的数据还是应该要累加下多个进程总共的 QPS。 |
2
keysona OP @zhoubug
数据库都建索引了。数据库的每个操作在 0.002 秒。 除了 redis 这块,其他都异步了。这里只放 token 的登陆信息。 测试时,只跑了一个 tornado 进程。 开两个的话,能到 50 左右。 |
3
pynix 2017-09-15 16:24:04 +08:00
应该是哪里阻塞了,同步框架也能随便达到这个 QPS
|
4
keysona OP @zhoubug
把一个 5 秒的 timer 关了之后。 单进程的 tornado 去到了 50qps。 然后之前没有看清楚,发现数据库的操作要花 200 毫秒了.... 平均每个请求 500-600 毫秒。 看来瓶颈应该是数据库了。 |
5
owenliang 2017-09-15 16:28:50 +08:00
单线程操作数据库,IO 同步,不卡才怪?
|
7
owenliang 2017-09-15 16:36:47 +08:00
@keysona 如果 mysql 是异步 IO 了,那我认为你应该优先怀疑你的测试方法,串行测试 QPS 取决于访问 mysql 的往返延迟,你应该用并行请求才对。
|
9
junneyang 2017-09-15 16:52:38 +08:00
python 搞高性能、高并发本来就不行,要是再加个锁之类那就更玩完儿了
|
10
SoulSleep 2017-09-15 17:00:28 +08:00 1
登录测试用不同账号试试,用同一个账号小心交叉锁
|
11
sunmonster 2017-09-15 17:16:56 +08:00
这个配置,hello world 才 1000 ?有点底呀
|
12
keysona OP |
13
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 库就没用过了 |
14
sujin190 2017-09-15 22:11:44 +08:00
tormysql 有使用连接池么?可以看下 MySQL 的 cpu 消耗
|
15
keysona OP |