• 博客迁移公告

    2011-12-30

    由于博客大巴令人发指的宕机事故及蜗牛速度,无法忍受,必须迁移出去

    祝博客大巴早日倒闭不再害人

    新博客地址

    www.cnblogs.com/shenguanpu

    欢迎亲朋好友常来看看

  • 今天做了个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)

  • 博客地址:  http://pythontime.sinaapp.com,源代码请参考 tornado-2.0\demos\blog

    在豆瓣求了几天邀请码终于到手

    tornado都更新到2.x了,好久没关注

    demo里东西也更全了,就用blog程序作为我的python博客原型吧

    1. 按照sae的python说明和mysql说明,建了表,并插入一条日志数据
    2. 直接把源码拷贝进去,改成sae方式的server运行 ,未果,错误信息也看不懂
    3. 一步步慢慢来吧,从tornado hello world开始,发现sae好像不支持 tornado.web.Application ,更改Application类型为tornado.wsgi.WSGIApplication 才可以,把home handler的 hello先打出来
    4. 把HomeHandler 改为原始渲染模版,entity设置为空,ok,首页出来了
    5. 然后是更改数据库连接,
      mysql_host="w.rdc.sae.sina.com.cn:3307"
      mysql_database="app_%s" %your_appname
      mysql_user="access key"
      mysql_password="secret key"
    6. 为方便调试 在handler中增加了try catch 打印错误信息,先是密钥没填对,连不上,改正确后,发现出现了mysql gone away 错误。。。刷新几遍,正常
    7. 手动在mysql里先插入篇文章,刷新后,在我的页面显示出来了
    8. 明天再接着鼓捣其他功能

     

  •  

    1. vim基本配置
      代码着色 显示行号 等:
      set nocompatible
      set columns=80
      set tabstop=4
      set ruler
      set expandtab
      set number
      set ignorecase
      set wrapmargin=15
      set cindent
      set shiftwidth=4
      syntax on
    2. vim tab键变为4个空格
      set expandtab # 使用space代替tab. 
      set tabstop=4 # 四个空格。
       set shiftwidth=4 # 自动缩进的宽度。
    3. ssh的退格键 (OT)
      经常出现进入python交互后,按退格键 出现 “^H^H^H” 而不是删除字符
        option->session option ->Terminal->Emulation->mapping keys   other mappings 里勾选Backspace sends  delete
    4. jmeter无界面方式运行:
      JMeter -n -t "xxx.jmx" -l test.log
    5. Linux的grep命令中使用OR,AND,NOT操作符
      OR:
      1 grep 'pattern1\|pattern2' filename  
      2 grep -E 选项可以用来扩展选项为正则表达式。 如果使用了grep 命令的选项-E,则应该使用 | 来分割多个3 pattern,以此实现OR操作。
      4 egrep 命令等同于‘grep -E’
      AND:
      1 使用 -E 'pattern1.*pattern2'
      2 多个grep
      NOT:
      grep -v 'pattern1' filename  
    6. vim显示行号
      加上 :se number
      关掉用:se nonumber
    7. vim同时显示多个文件:
      :split
      :vsplit
      打开多个 vim  file1 file2
      Ctrl+w 切换
    8. taglist 和 WinManager插件
      可显示当前文件程序结构和目录文件结构
      http://www.vim.org/scripts/script.php?script_id=273
      http://www.vim.org/scripts/script.php?script_id=95
      更多插件配置见 http://blog.csdn.net/wooin/article/details/1858917  
    9.  查询当前用户下程序占用的端口
      1 lsof -i :端口 号 (可能需要安装软件包)
      2 netstat -tulpn 
    10. 自启动脚本
      避免服务器意外故障时的重启
      /etc/rc.d/rc.local 里加入启动sh 脚本即可

     

  • # uname -a # 查看内核/操作系统/CPU信息
    # head -n 1 /etc/issue # 查看操作系统版本
    # cat /proc/cpuinfo # 查看CPU信息

    使用   head -n 1 /etc/issue  列举我目前用过的linux os:

    1.  Debian GNU/Linux squeeze
    2. Amazon Linux AMI release 2010.11.1 (beta)  (2011.02.1.1 (beta) 还有这一版本 感觉这个号码像是申请日期?)
    3. CentOS release 5.5 (Final)  (首都在线云计算) 
    4. Red Hat Enterprise Linux Server release 5.5 (Tikanga) (测试机和正式服务器多半是这个版本)