机子: 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 ![]() 登录测试用不同账号试试,用同一个账号小心交叉锁 |
![]() | 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 |