meliae内存分析-基本用法

2014年2月24日 12:58

python的内存分析工具meliae,挺好用的.
示例

1.记录程序的内存使用信息

import time

# 此处是可能发生内存泄露的地方
def main():
    pass

if __name__ == '__main__':
    # 通过循环执行,将泄露的内存积累放大
    while True:
        main()
        time.sleep(10)
        # 记录每次执行完后占用的内存
        from meliae import scanner
        scanner.dump_all_objects('mem_dump%s' % time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

2.查看占用的内存大小

from meliae import loader
om = loader.load('mem_dump2014-02-2022-34-43')
om.summarize()
具体分析引用关系太麻烦,以上是个人喜欢的方法:
用循环将泄露的内存累积放大. 然后记录每次执行完后占用的内存.
查看占用内存大小. 再比较每次的内存大小,即可知道是否发生泄露.
至于内存泄露的地方,则用排除法,重复上述过程,定位泄露地点.
 
基本用法
  • 获取进程的内存信息
import time
from meliae import scanner
scanner.dump_all_objects('mem_dump%s' % time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
  • 查看占用内存
from meliae import loader
#加载dump文件
om = loader.load('mem_dump2014-02-2022-34-43')
#分析内存占用情况
om.summarize()
  • 输出样例
Total 40335 objects, 125 types, Total size = 6.5MiB (6768944 bytes)
 Index   Count   %      Size   % Cum     Max Kind
     0    1245   3   1792824  26  26   98584 dict
     1   18560  46   1568824  23  49   12479 str
     2     226   0    730272  10  60   12624 module
     3     559   1    505336   7  67     904 type
     4    3573   8    457344   6  74     128 code
     5    3759   9    451080   6  81     120 function
     6    2506   6    189840   2  84     576 tuple
     7    1383   3    163768   2  86    4280 list
     8    1303   3    104240   1  88      80 wrapper_descriptor
     9     895   2     78760   1  89      88 weakref
    10     942   2     67824   1  90      72 builtin_function_or_method
    11     198   0     66928   0  91    8424 set
    12     388   0     65136   0  92    1552 unicode
    13     807   2     58104   0  93      72 method_descriptor
    14      50   0     56000   0  93    1120 OracleDB
    15    1680   4     40320   0  94      24 int
    16      36   0     36768   0  95    1192 StgDict
    17     446   1     32112   0  95      72 getset_descriptor
    18      87   0     29928   0  95     344 WeakSet
    19     395   0     28440   0  96      72 member_descriptor
 
字段说明
Index : 行索引号
Count : 该类型的对象总数
%(Count) : 该类型的对象总数 占 所有类型的对象总数 的百分比
Size : 该类型的对象总字节数
%(Size) : 该类型的对象总字节数 占 所有类型的对象总字节数 的百分比
Cum : 累积行索引后的%(Size)
Max : 该类型的对象中,最大者的字节数
Kind : 类型
 
  • 对象及引用关系
个人不喜欢用这个
#得到所有的OracleDB对象
p = om.get_all('OracleDB')
#查看第一个对象
p[0]
#可以查看该对象的所有引用
p[0].c
#查看谁引用了这个对象
p[0].p
 

Tags: 内存;meliae
评论(0) 阅读(2020)

mongodb安装

2014年2月19日 11:15

在fedora 20中安装mongodb

  • 安装
sudo yum install mongodb mongodb-server
  • 启动服务器
sudo service mongod start

如果以mongod命令启动,要有数据库路径,否则会出现

 ERROR: dbpath (/data/db/) does not exist.
 Create this directory or give existing directory in --dbpath.
  • 进入后台管理
mongo

即可使用脚本管理. 例如: show dbs 查看数据库

  • 查看管理界面
访问 http://localhost:27017/
You are trying to access MongoDB on the native driver port. For http diagnostic access, add 1000 to the port number
据提示访问 http://localhost:28017/
结果访问不了,发现默认限制访问
修改 /etc/mongodb.conf 
# Disable the HTTP interface (Defaults to port+1000).
nohttpinterface = true

注释掉再重启,即可访问

  • 使用自己的配置文件
mongod -f mongodb.conf
  • 在命令行中指定数据存放路径
mongod --dbpath=/opt/mongodb/data
  • 停止服务
sudo service mongod stop
以mongod -f ...启动,也可停止
 

评论(0) 阅读(923)

领导管理的原则

2014年2月14日 09:34

作之君,作之亲,作之师
君: 代表领导,代表以身作则
亲: 是父母,代表关怀,代表爱护
师: 代表处处引导他,教诲
 
管理的好坏全在其中,三者缺一不可。

 

评论(0) 阅读(586)

SQL标准规定中null值判断是否合理?

2014年2月11日 18:50

在postgres中判断null值时,下面语句的结果不相等,为什么?
select * from user_info where user_name is null
select * from user_info where user_name = null
 
原因是postgres遵循sql标准,在ANSI SQL(SQL-92)标准中规定的Null值的比较取值结果都为False.
它认为NULL 代表一个未知的数值,无法知道两个未知的数值是否相等。
 
这个理由很不充分,既然无法判断,那么is null又是如何判断它是空的呢?
 
虽然null表面含义是未知值,但是计算机中不可能有不确定的表示. 常见程序语言中null实际都是一个特殊值,一个确定的特殊值。所以在编程语言中是允许使用null=null(值比较)的. SQL中不允许是否合理?
 

Tags: sql;postgres
评论(0) 阅读(650)

postgres递归查询

2014年2月11日 16:58

Tags: postgres
评论(0) 阅读(997)

jquery对象是否相同

2014年2月11日 13:46

通过不同形式得到同一个htnl元素,如何比较它是否相同?
假设得到后,两者变量名是A和B. (A和B是js元素,还是jquery对象,此时不清楚)
 
第一个想到的是方法是$(A) == $(B),结果返回false
再试试$(A)[0] == $(B)[0],结果返回true
 
它比较的是什么?
 
看看下面例子,下面的两个input比较,会相同吗.
<div id="content">
    <input name="user_name"/>
    <input name="user_name"/>
</div>
 
它们不同
$(function(){
    var inputs = $("#content input")
    console.info(inputs[0] == inputs[1]);  //false
    console.info($(inputs[0]) == $(inputs[0])); //false
});
 
其实比较只有两种类型: 值类型和引用类型.
上面就是引用比较. jquery的$会产生新对象,每次的引用都不同,自然就不相等.
所以只能用最初的引用进行比较,而不是jquery转化后的.

评论(1) 阅读(3107)

理解select模块--等待IO完成

2014年1月26日 17:24

Tags: 非阻塞 python
评论(0) 阅读(1076)

socket.error: [Errno 32] Broken pipe错误的原因

2014年1月26日 15:47

linux下的socket程序,尝试发送消息到已关闭的socket上,会出现此错误.
 
示例代码
服务端server.py
#encoding=utf-8
import socket
import time


def main():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(('0.0.0.0', 8050))
    sock.listen(5)

    client_sock, address = sock.accept()
    while True:
        msg = client_sock.recv(1024)
        print msg
        client_sock.send('from server: %s' % msg)
        time.sleep(1)
    client_sock.close()
    sock.close()


if __name__ == '__main__':
    main()
 
客户端client.py
#encoding=utf-8
import socket
import time


def main():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(('0.0.0.0', 8050))
    while True:
        sock.send('hi')
        print sock.recv(1024)
        time.sleep(1)
    sock.close()


if __name__ == '__main__':
    main()
 
运行server.py和client.py,然后中断client.py会出现上面错误。

Tags: socket
评论(0) 阅读(4116)

ssh在远程执行多个命令

2014年1月21日 11:18

执行单个命令

ssh wyq@135.32.9.98 'ps -ef |grep process.py'

在远程主机上执行命令"ps -ef |grep process.py",在本机就可以看到输出.

使用分号分隔,允许一次执行多个命令

ssh wyq@135.32.9.98 'cd ~/src; sh start.sh'

进入到~/src目录,然后执行脚本sh start.sh

 

评论(0) 阅读(2103)

yum更新initscripts和selinux失败

2014年1月20日 09:32

来源 http://stevenrosenberg.net/blog/linux/fedora/2014_0118_fedora_update_scriptlet_problem

最近在fedora20中用yum更新,会出现问题

[wyq@localhost ~]$ sudo yum -y  update
已加载插件:fastestmirror, langpacks, refresh-packagekit
Loading mirror speeds from cached hostfile
 * fedora: mirrors.yun-idc.com
 * fedora-sohu: mirrors.yun-idc.com
 * updates: mirrors.yun-idc.com
 * updates-sohu: mirrors.yun-idc.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 initscripts.x86_64.0.9.50-1.fc20 将被 升级
---> 软件包 initscripts.x86_64.0.9.51-1.fc20 将被 更新
---> 软件包 selinux-policy-targeted.noarch.0.3.12.1-116.fc20 将被 升级
---> 软件包 selinux-policy-targeted.noarch.0.3.12.1-117.fc20 将被 更新
--> 解决依赖关系完成

依赖关系解决

================================================================================
 Package                     架构       版本                  源           大小
================================================================================
正在更新:
 initscripts                 x86_64     9.51-1.fc20           updates     414 k
 selinux-policy-targeted     noarch     3.12.1-117.fc20       updates     3.6 M

事务概要
================================================================================
升级  2 软件包

总下载量:4.0 M
Downloading packages:
Delta RPMs reduced 414 k of updates to 194 k (53% saved)
(1/2): initscripts-9.50-1.fc20_9.51-1.fc20.x86_64.drpm     | 194 kB   00:01     
(2/2): selinux-policy-targeted-3.12.1-117.fc20.noarch.rpm  | 3.6 MB   00:13     
--------------------------------------------------------------------------------
总计                                               253 kB/s | 3.8 MB  00:15     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
error: %pre(initscripts-9.51-1.fc20.x86_64) scriptlet failed, exit status 127
Error in PREIN scriptlet in rpm package initscripts-9.51-1.fc20.x86_64
error: initscripts-9.51-1.fc20.x86_64: install failed
error: %pre(selinux-policy-targeted-3.12.1-117.fc20.noarch) scriptlet failed, exit status 127
Error in PREIN scriptlet in rpm package selinux-policy-targeted-3.12.1-117.fc20.noarch
initscripts-9.50-1.fc20.x86_64 was supposed to be removed but is not!
  验证中      : initscripts-9.50-1.fc20.x86_64                              1/4 
  验证中      : selinux-policy-targeted-3.12.1-117.fc20.noarch              2/4 
selinux-policy-targeted-3.12.1-116.fc20.noarch was supposed to be removed but is not!
  验证中      : selinux-policy-targeted-3.12.1-116.fc20.noarch              3/4 
  验证中      : initscripts-9.51-1.fc20.x86_64                              4/4 

失败:
  initscripts.x86_64 0:9.50-1.fc20                                              
  initscripts.x86_64 0:9.51-1.fc20                                              
  selinux-policy-targeted.noarch 0:3.12.1-116.fc20                              
  selinux-policy-targeted.noarch 0:3.12.1-117.fc20 

需要关闭selinux

sudo setenforce 0 //临时关闭selinux

sudo yum -y update //此时再更新,即可

sudo setenforce 1 //开启selinux

评论(0) 阅读(676)