Tornado 并发数很低,正常么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bluesky139
V2EX    Tornado

Tornado 并发数很低,正常么?

  •  
  •   bluesky139 2016-01-14 17:47:48 +08:00 16914 次点击
    这是一个创建于 3556 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 localhost 下测试,像 demo 一样, get 或 post 里面没有任何多余的耗时代码,直接返回。
    得到的结果是每秒 200 多的并发数,这正常么?

    目前系统是 win7 , CPU 是 E3 1231 ,
    从任务管理器来看,似乎是单线程跑满了(因为进程的 CPU 占用率为 13 )。
    各位用 tornado 的朋友也是同样的结果么? 还是说哪里有坑?
    19 条回复    2016-01-15 17:06:30 +08:00
    scys
        1
    scys  
       2016-01-14 17:51:46 +08:00
    测试 tornado ,不要在 windows 下,完全没有优化,只是个模型
    bobuick
        2
    bobuick  
       2016-01-14 17:51:57 +08:00
    什么压力工具, 什么参数,在本机么,要发全一点
    aisk
        3
    aisk  
       2016-01-14 17:53:23 +08:00
    Windows 下好像只支持 select ,肯定不会快了。
    phithon
        4
    phithon  
       2016-01-14 17:54:05 +08:00
    楼上说的对, windows 下只是 select ,最慢的异步模型。
    bluesky139
        5
    bluesky139  
    OP
       2016-01-14 18:09:33 +08:00
    @scys
    @aisk
    @phithon
    @bobuick
    刚在 mac 下试了下,也一样。压力工具是 JMeter.

    并发数是我自己统计的,代码如下:
    access = 0
    def PrintDown():
    global access
    print 'access', access
    access = 0
    Timer(1, PrintDown, ()).start()
    Timer(1, PrintDown, ()).start()

    class MainHandler(tornado.web.RequestHandler):
    def post(self):
    global access
    access = access + 1
    self.write('')

    结果如下:
    access 161
    access 142
    access 169
    access 139
    access 168
    access 136
    scys
        6
    scys  
       2016-01-14 18:31:32 +08:00
    为啥不跑在 linux/bsd 下?
    lecher
        7
    lecher  
       2016-01-14 19:21:33 +08:00 via Android
    这份代码是阻塞的。请自行加上异步处理的装饰器。
    phithon
        8
    phithon  
       2016-01-14 19:29:42 +08:00
    楼上正解。楼主你在异步框架里写阻塞的内容,当然慢了~
    wy315700
        9
    wy315700  
       2016-01-14 20:01:11 +08:00
    并发和 QPS 不是一个概念
    sujin190
        10
    sujin190  
       2016-01-14 22:47:30 +08:00
    cpu 跑满了么?这简单的,四核四进程的话 qps 可以到两万不成问题,单进程七八千 qps 也无压力
    neoblackcap
        11
    neoblackcap  
       2016-01-15 01:18:11 +08:00
    @bluesky139 OS X 下的 IO 复用也是烂,OS X 下面的可不是 kqueue ,肯定也是不行的。像 Tornado 这样的异步框架,都是基于 epoll/kqueue 的,没有这些系统调用,快不起来。

    还有就是不能用标准库里面的 time 这些库,这些库调用的时候都会堵塞 IOloop ,肯定快不了。
    mengskysama
        12
    mengskysama  
       2016-01-15 01:41:46 +08:00 via Android
    yield gen.sleep(0.5)
    dai269619118
        13
    dai269619118  
       2016-01-15 09:18:49 +08:00
    tornado 是单进程的
    可以多开几个
    用 nginx 做反向代理
    sujin190
        14
    sujin190  
       2016-01-15 09:43:41 +08:00
    @neoblackcap OS X 用的就是 kqueue ,有什么不同么?
    bluesky139
        15
    bluesky139  
    OP
       2016-01-15 10:47:33 +08:00
    @scys
    @neoblackcap
    我现在移到了 linux 下( CPU i5-4278U ,这个尾巴带 U 的 CPU 会不会太垃圾了?),结果:
    access 1278
    access 1335
    access 1229

    @lecher
    @phithon
    这两位是指 Timer 里面会锁 access 么?
    我现在改成了这样:
    class MainHandler(tornado.web.RequestHandler):
    executor = ThreadPoolExecutor(20000)
    @tornado.web.asynchronous
    @tornado.gen.coroutine
    def get(self):
    ret = yield self.get_async('')
    self.write('end.' + str(ret))
    self.finish()

    @run_on_executor
    def get_async(self, p):
    global access
    access = access + 1
    return 5
    结果:
    access 339
    access 263
    access 310
    话说这个怎么弄比较好?

    @dai269619118
    暂时先不考虑多实例的问题,先把单个提起来再说。
    alex8224
        16
    alex8224  
       2016-01-15 10:54:13 +08:00
    @bluesky139 上支持 windows IOCP 的 IOLoop
    chuangbo
        17
    chuangbo  
       2016-01-15 14:24:02 +08:00
    异步框架是要 IO 压力高的时候优势才大。
    neoblackcap
        18
    neoblackcap  
       2016-01-15 17:03:44 +08:00
    @sujin190 根据网上的反应来看, OS X 的 kqueue 应该是跟 FreeBSD 的不太一样,记得当初看到的说法是 OS X 网络性能烂,但到底是不是因为 IO 复用部分的系统调用烂呢,这个我就不清楚了。

    不过根据大家针对高级 IO 接口的比较来看, OS X 就没被比较过,看过的评测都是 BSD/kqueue, Linux/epoll, Windows/IOCP 。因此根据我的推断,应该是 OS X 的 kqueue 实现是残废的或者是它其他网络部分实现是残废的。

    此处引用自 Tornado 的官方文档 http://www.tornadoweb.org/en/stable/index.html

    Platforms: Tornado should run on any Unix-like platform, although for the best performance and scalability only Linux (with epoll) and BSD (with kqueue) are recommended for production deployment (even though Mac OS X is derived from BSD and supports kqueue, its networking performance is generally poor so it is recommended only for development use). Tornado will also run on Windows, although this configuration is not officially supported and is recommended only for development use.
    neoblackcap
        19
    neoblackcap  
       2016-01-15 17:06:30 +08:00
    @bluesky139 要测试的话,请去看官方的测试例子,记得 Tornado 就提供一个类似 Time 的非堵塞库。专门给大家测试用的。多读文档,你会发现很多问题文档里面就有写了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     946 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 18:49 PVG 02:49 LAX 11:49 JFK 14:49
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86