• tornado cherrypy bottle性能测试



    2011-11-25

    今天做了个tornado cherrypy 和 bottle的对比

    ab -n 10000 -c 1000 http://192.168.8.2:8889/ 1588req/s (tornado)
    ab -n 10000 -c 1000 http://192.168.8.2:9080/hello/shengp 323.35 req/s (bottle)
    ab -n 10000 -c 1000 http://192.168.8.2:8088/nqsdk/change 452.36 req/s (cherrypy)

    发现跟别人测的3000+有很大差距

    在CPyUG 里发帖 竟然被收录到啄木鸟社区了 很是激动

    链接:http://wiki.woodpecker.org.cn/moin/MiscItems/2011-11-25

    被收录的文章

    现象

    dean forever deanforwever2010@gmail.com
    发件人当地时间: 发送时间 10:47 (GMT+08:00)。发送地当前时间:下午10:05。 ✆
    主题: [CPyUG] 测试tornado性能时 并发加到2000就开始出错?

    双核 2.0Ghz debian系统 跑tornado的hello world:

    切换行号显示
    import tornado.httpserver
    import tornado.ioloop
    import tornado.web
    class MainHandler(tornado.web.RequestHandler):
    def get(self):
    self.write("Hello, world")
    application = tornado.web.Application([(r"/", MainHandler),])

    if __name__ == "__main__":
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(1081)
    tornado.ioloop.IOLoop.instance().start()

    ab -n 10000 -c 1000 http://192.168.8.2:8889/ 并发可达到1588req/s

    执行 ab -n 10000 -c 2000 http://192.168.8.2:1081/ 出错:
    Traceback (most recent call last):
    File "/usr/local/lib/python2.6/site-packages/tornado-1.2.1-py2.6.egg/tornado/ioloop.py",
    line 269, in start
    File "/usr/local/lib/python2.6/site-packages/tornado-1.2.1-py2.6.egg/tornado/stack_context.py",
    line 173, in wrapped
    File "/usr/local/lib/python2.6/site-packages/tornado-1.2.1-py2.6.egg/tornado/httpserver.py",
    line 238, in _handle_events
    File "/usr/local/lib/python2.6/socket.py", line 195, in accept
    error: [Errno 24] Too many open files

    在另一台8核 8G内存服务器上跑ab 性能也没有见提升,并发开到2000也出错:
    Traceback (most recent call last):
    File "/usr/local/python/lib/python2.6/site-packages/tornado-2.1.1-py2.6.egg/tornado/ioloop.py",
    line 309, in start
    File "/usr/local/python/lib/python2.6/site-packages/tornado-2.1.1-py2.6.egg/tornado/netutil.py",
    line 314, in accept_handler
    File "/usr/local/python/lib/python2.6/socket.py", line 195, in accept
    error: [Errno 24] Too many open files

    求指点,是否我的测试方法哪里不对,怎么看不到别的大牛写的 3000+的并发效果?

    内置支持

    WooParadog guohaochuan@gmail.com
    发件人当地时间: 发送时间 20:20 (GMT+08:00)。发送地当前时间:下午10:08。 ✆

    翻了一下, 发现tornado自带了并行的东西...用法如下..在我的机器上(Dell i5/4G)能跑到5790.15 [#/sec] (mean) 不用的话在2726.08 [#/sec] (mean).. 嗯, 笔记本假四核...

    切换行号显示
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    '''
    tor.py
    Author: WooParadog
    Email: Guohaochuan@gmail.com

    Created on
    2011-11-25
    '''

    import tornado
    import tornado.process
    import tornado.web
    from tornado import httpserver
    from tornado import ioloop
    from tornado.web import RequestHandler

    class non(RequestHandler):
    def get(self):
    """docstring for get"""
    self.write("hello")

    def main():
    """docstring for main"""
    sokets = tornado.netutil.bind_sockets(8080)
    tornado.process.fork_processes(0)
    application = tornado.web.Application([
    ('',non)])
    http_server = httpserver.HTTPServer(application)
    http_server.add_sockets(sokets)
    ioloop.IOLoop.instance().start()

    if __name__ == '__main__':
    main()

    大牛你这个最管用了! 
    ab -n 10000 -c 1000 http://192.168.0.36:1081/
    ...
    Requests per second: 8416.98 [#/sec] (mean)

    并发开到5000 都还能达到 5000req/s 看来真是自己用的不对 呵呵

    飞龙分析

    Felinx Lee felinx.lee@gmail.com
    发件人当地时间: 发送时间 11:33 (GMT+08:00)。发送地当前时间:下午10:10。 ✆
    这个是系统允许的fd限制所制,可以参考下这个

    http://thedaneshproject.com/posts/how-to-increase-total-file-descriptors-count-on-linux/
    每个进程的fd limit有限制,参考下:

    http://stackoverflow.com/questions/2569620/socket-accept-error-24-to-many-open-files
    用了fork其实是根据多核来跑多个进程,每个进程的限制还没有达到,所以没出错。但tornado的老大们是不推荐用fork的。



    最终按照 WooParadog 的方法,最好并发达到了1W+ (在8核系统上)

    飞龙的推荐文章我照着做了一遍 发现木有效果 不知道是不是机器问题。。。

    跑的有问题 404错误了 http://192.168.0.36:1081 去掉斜杠跑 没有出错 :

    Requests per second: 11187.92 [#/sec] (mean)

  • 相关阅读:
    IDEA调试快捷键
    视频预览
    文件上传:简单的demo
    Java 运行时优化
    Java 类加载
    Java StringTable
    Java 为什么不用Vector
    C++ 查找函数
    JVM 垃圾回收
    JVM 直接内存
  • 原文地址:https://www.cnblogs.com/shenguanpu/p/2299786.html
Copyright © 2020-2023  润新知