-
博客迁移公告
2011-12-30
由于博客大巴令人发指的宕机事故及蜗牛速度,无法忍受,必须迁移出去
祝博客大巴早日倒闭不再害人
新博客地址
www.cnblogs.com/shenguanpu
欢迎亲朋好友常来看看
-
tornado cherrypy bottle性能测试 - [coding]
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)
-
我的新浪sae Tornado python博客开张了 - [coding]
2011-11-23
博客地址: http://pythontime.sinaapp.com,源代码请参考 tornado-2.0\demos\blog
在豆瓣求了几天邀请码终于到手
tornado都更新到2.x了,好久没关注
demo里东西也更全了,就用blog程序作为我的python博客原型吧
- 按照sae的python说明和mysql说明,建了表,并插入一条日志数据
- 直接把源码拷贝进去,改成sae方式的server运行 ,未果,错误信息也看不懂
- 一步步慢慢来吧,从tornado hello world开始,发现sae好像不支持 tornado.web.Application ,更改Application类型为tornado.wsgi.WSGIApplication 才可以,把home handler的 hello先打出来
- 把HomeHandler 改为原始渲染模版,entity设置为空,ok,首页出来了
- 然后是更改数据库连接,
mysql_host="w.rdc.sae.sina.com.cn:3307"
mysql_database="app_%s" %your_appname
mysql_user="access key"
mysql_password="secret key"
为方便调试 在handler中增加了try catch 打印错误信息,先是密钥没填对,连不上,改正确后,发现出现了mysql gone away 错误。。。刷新几遍,正常
- 手动在mysql里先插入篇文章,刷新后,在我的页面显示出来了
- 明天再接着鼓捣其他功能
-
每天一个小功能(vim等) - [coding]
2011-11-17
- 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 - vim tab键变为4个空格
set expandtab # 使用space代替tab.
set tabstop=4 # 四个空格。
set shiftwidth=4 # 自动缩进的宽度。 - ssh的退格键 (OT)
经常出现进入python交互后,按退格键 出现 “^H^H^H” 而不是删除字符
option->session option ->Terminal->Emulation->mapping keys other mappings 里勾选Backspace sends delete - jmeter无界面方式运行:
JMeter -n -t "xxx.jmx" -l test.log - 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 - vim显示行号
加上 :se number
关掉用:se nonumber - vim同时显示多个文件:
:split
:vsplit
打开多个 vim file1 file2
Ctrl+w 切换 - 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 - 查询当前用户下程序占用的端口
1 lsof -i :端口 号 (可能需要安装软件包)
2 netstat -tulpn - 自启动脚本
避免服务器意外故障时的重启
/etc/rc.d/rc.local 里加入启动sh 脚本即可
- vim基本配置
-
收集一下用过的linux os - [我说]
2011-11-09
# uname -a # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息使用 head -n 1 /etc/issue 列举我目前用过的linux os:
- Debian GNU/Linux squeeze
- Amazon Linux AMI release 2010.11.1 (beta) (2011.02.1.1 (beta) 还有这一版本 感觉这个号码像是申请日期?)
- CentOS release 5.5 (Final) (首都在线云计算)
- Red Hat Enterprise Linux Server release 5.5 (Tikanga) (测试机和正式服务器多半是这个版本)










