python程序内存占用分析-meliae

写的dht协议搜索的程序,这几天优化了一下发现速度确实快了好多。但是出现了一个新的问题,内存直接飙升,我开了十个爬虫占用内存800m。开始我以为是节点太多了,找了几个小问题修改一下,发现没用。后来就到网上查找python内存分析的工具,查了一点资料发现python有个meliae库操作非常方便,就使用分析了一下,发现不是节点太多的原因0 0,是保存发送的t_id,用来标示返回的消息是那个发出的一个字典过大了。 从分析的结果非常容易的定位了某个对象的数量和大小,非常容易分析。我开始以为是因为好多发送查询信息以后,对面没返回造成这个字典里的元素没有释放造成的,我就用过期时间判断了一下,进行过期删除。发现是小了,但是不是非常显著,好像少了几十不到100M。后来又减少了查找一个随机hash的时间,以前是1分钟查一次,我改成了就第一次查!,发现没减少0 0.不知道是啥的原因。应该就是查找hash,询问节点,然后返回然后询问里边的节点,最后数量越来越多,但是我不明白的是,怎么会这么多运行一分钟就有60万条。也就是说当时内存没释放的对象就有这么多。达到这个内存占用后,基本就不再变化,有很小很慢的提升,因为还开的其他程序,不确定是不是这些程序其他对象的增加造成的。等分阶段dump测试一下。 安装直接pip install meliae 就ok了,我看好久没更新的项目了,不知道还有没有好的替代品不过用着还不错。 将内存dump到文件
	from meliae import scanner
	scanner.dump_all_objects('/tmp/dump%s.txt' % time.time())
分析文件:
	from meliae import loader
	#加载dump文件
	om = loader.load('/opt/log/dump.txt')
	#计算各Objects的引用关系
	om.compute_parents()
	#去掉各对象Instance的_dict_属性
	om.collapse_instance_dicts()
	#分析内存占用情况
	om.summarize()
字段意义如下: Index : 行索引号 Count : 该类型的对象总数 %(Count) : 该类型的对象总数 占 所有类型的对象总数 的百分比 Size : 该类型的对象总字节数 %(Size) : 该类型的对象总字节数 占 所有类型的对象总字节数 的百分比 Cum : 累积行索引后的%(Size) Max : 该类型的对象中,最大者的字节数 Kind : 类型 分析某个对象,找出它的引用关系
	#得到所有的POP3ClientProtocol对象
	p = om.get_all('POP3ClientProtocol')
	#查看第一个对象
	p[0]
	#可以查看该对象的所有引用
	p[0].c
	#查看谁引用了这个对象
	p[0].p
Read more...

使用django,nginx,supervisor,Gunicorn,virtualenv,mysql搭建网站

在工作时服务器上环境的搭建,做个笔记记录。用到的东西主要有:django,nginx,supervisor,Gunicorn,virtualenv,mysql。 安装就略过了,每一个的文档上有介绍。virtualenv有一个virtualenvwrapper方便操作。 先安装virtualenv,然后在python虚拟环境里边安装django,gunicorn等相关库。 supervisor用来守护django网站启动的进程,默认配置文件添加/etc/supervisor/conf.d/name.conf
[program:code]
command=/home/sys/.virtualenvs/%(program_name)s/bin/gunicorn %(program_name)s.wsgi:application -c /home/www/%(program_name)s/%(program_name)s/gunicorn.conf.py
user=hg
directory=/home/www/%(program_name)s
autostart=true
autorestart=true
redirect_stderr=True
gunicorn.conf.py就是启动django的一些参数,制定监听的端口bind = "127.0.0.1:9006"。然后在nginx配置文件里边,进行转发。
server {
listen        80;
set $name "code";

server_name  code.xx.com;

root   /home/www/${name}/root;
access_log  /var/log/nginx/${name}.access.log;

location ~ (\.hg|\.orig|\.bak) {
deny all;
}

location /static/ {
expires max;
access_log off;
alias /home/www/${name}/static/;
}

location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass   http://127.0.0.1:9006;
}
}
supervisor的一些命令: 修改配置文件以后要使用supervisorctl update命令,否则不会更新。刚开始的时候,捣鼓了好长时间 才知道要这样搞0 0. supervisorctl start all启动所有进程, supervisorctl start code 单独启动code进程。 使用supervisorctl可以进入管理程序。
Read more...

python内建函数type()

今天在网上看到type的一段代码 ,然后查了一下文档,才知道type还有三个参数的用法。 http://docs.python.org/2/library/functions.html#type 以前只是知道type可以检测对象类型。然后发现了一个有趣的用法。 def println(self): a = 1 + 1 print "%s,%s" % (self.aa, a) A = type('A',(),{'aa':'print a', 'println': println}) a = A() type(a) Out[11]: __main__.A a.println() print a,2 第一个参数是类的名字,第二个元组是父类,第三个是属性。 哈哈,我觉得很好笑,虽然我函数里边第一个参数还是写的self,但是如果写一段代码都用这种方法定义类,然后再不注意类名的规范,代码会变的很难读。
Read more...

ubuntu安装qq和搜狗、谷歌输入法

同事写在wiki上,和我说照装的,记录一下。 安装wine sudo add-apt-repository ppa:ubuntu-wine/ppa 1911  sudo apt-get update 1912  sudo apt-get install wine 安装gtk sudo apt-get install libgtk2.0-0:i386 不加386不行,我开始没有加,qq不能启动,报错了。 到http://www.longene.org/download/下载qq,并安装。 ubuntu搜狗谷歌输入法安装 ubuntu install sougoupinyin/googlepinyin 1. sudo apt-get remove --purge ibus 卸载Ubuntu 自带输入法 2. sudo add-apt-repository ppa:fcitx-team/nightly 添加源 3. sudo apt-get update 4. sudo apt-get install fcitx-sogoupinyin fcitx-googlepinyin
Read more...

django1.6 RedirectView小改变

0 0,今天用到redirectview,查文档,发现在django1.6版本可以直接指定pattern_name参数来直接指定跳转的url,方便了好多0 0.以前很讨厌在url里引用一大堆东西,我都尽可能写在views里边,至少看起来清楚。 下面有介绍get_redirect_url()只有在url没有设置的时候才会用到pattern_name。doc:https://docs.djangoproject.com/en/1.6/ref/class-based-views/base/#redirectview
Read more...

大学同学的博客

http://0x7c00.sinaapp.com 我以前让他找博客网站申请一个,都一直没写过什么。昨天晚上给他在sae开了一个应用,用wp搭建了一个,他觉得好好利用一下0 0,不知道能坚持个什么情况。最坑的是,以前在群里给他讲0x55aa我为啥起这个名字,他都记错了,还非要个0x7c00。现在都工作了,希望都加油努力学习。
Read more...

Mercurial hg 指定ssh private key

发现现在越来越懒,很多小问题都不再记录。要改正 1.生成一个新key
ssh-keygen
2.添加key ssh-add ~/.ssh/test 3.编辑~/.ssh/config 添加: Host woqu HostName 192.168.1.118 IdentityFile /home/a0x55aa/.ssh/test 4.项目.hg/hgrc修改 [paths] default = ssh://hg@woqu/test/haha   还有一种方法: 定义hgrc里边[ui],ssh
ssh = ssh -i ~/.ssh/test -C
编辑的时候使用 hg clone -e 'ssh -i /path/to/key' ssh://user@host/path
Read more...

dht爬虫终于有眉目了

从看了小虾的博文以后就也想写一个爬虫,一直写到现在才有点眉目。。其中还参考了http://codemacro.com上写的思路,不过有很多功能还没涉及到。 已经实现的功能,创建一个节点,能在dht网络中友好的生存并获取info_hash,好多技巧还没用到。实现插入数据库中,现在直接访问django写的应用(主要也是测试功能,两个功能分开了还没合到一起,直接用django的orm肯定要快好多),然后我在django里边写了下载种子文件和解析种子文件信息的功能。发现有许多hash找不到种子,下载不下来,后面还要在看一下怎么生成种子文件。分析种子信息的代码是从网上找的,然后修改了一下。 一个节点可能有点偏,不计算重复,开始时平均一分钟2个,计算重复一份钟一个。 前段时间又想到以前看群里讨论的关于p2p的应用,想自己实现一下,正好现在对协议了解了。不准备用 python写了,再看一个新语言折腾一下。
Read more...

ubuntu12.04+sqlalchemy+pymssql连接mssql server错误的解决

开始提示, File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/dialects/mssql/pymssql.py", line 72, in _get_server_version_info r"Microsoft SQL Server.*? - (\d+).(\d+).(\d+).(\d+)", vers) File "/usr/lib/python2.7/re.py", line 137, in match return _compile(pattern, flags).match(string) TypeError: expected string or buffer 然后我打印了vers,发现为None,然后有修改连接字符串,发现不是连接的错误。 然后使用~$ sqsh -U sa -P 123456 -S 192.168.1.21, 1> select @@version 2> go 正确的打印了版本信息,这也不可能是我sqlserver的问题了。 为什么就会为None了呢,shell下直接用pymssql 执行select语句也都返回None。 这期间各种搜索。。各种啊,,没有找到有用的信息,啥都有。 然后 搜索 pymssql no data 发现google都有好多关键字提示。。。然后搜到了问题。 http://stackoverflow.com/questions/7250464/python-and-pymssql https://bugs.launchpad.net/ubuntu/+source/pymssql/+bug/918896
$ apt-get remove python-pymssql
$ apt-get install freetds-dev
$ pip install Cython
$ pip install pymssql

就好了,我之前好像也是用apt-get安装的 因为我看编译需要依赖库,就没有安装,
直接apt-get了。fretds我是安装了的,Cython之前没有安装。不知道与Cython有没关系。
今天部署的时候发现好像是版本的问题,用1.0.2有这个问题,去下载dev 30130403没问题。。。
Read more...

函数语言的纠结

从昨天到今天,是决定写东西用的语言,准备用一个函数式语言。前几天连想没想用cl找库开搞,不过这个过程是困难的,找到没几个相关库,还感觉很不如意,文档只有简单的介绍,我这刚学会语法的水平简直用不了,对库调用什么的,我直接找了sbcl的io-net包,但是还是放弃了,准备先用cl写点小程序再说。 其实golang写这个东西是个不错的选择,但是对打括号闭合感觉太不有爱,也对golang相对熟悉不想再研究了。今天中午编译了两个 小时的rust,看了一下很不错,要用的东西基本有,现成的没有,如果不考虑花费时间会很长,就会边学边用了。然后相继看了ocaml,haskell,scheme这几个听的多的,比较了一下官网,库,和文档,最后选择了haskell。scheme 语法比较合我意,但是目测和cl应该一样的悲剧。总的来说,从官网内容丰富程度,我选择了scheme。scheme官网上还有很多本scheme的书,很好。
Read more...

Previous Page 1 2 3 4 5 6 7 8 9 10 Next Page 最后一页