python 内存分析

1、改源码重新编译打印相关信息

obmalloc.c 文件中打印 maxarenas,值为当前环境分配 arena 个数;分配 arena 时并没有马上分配对应的pools,故对于每一个 arena,nfreepools 和 ntotalpools 为分配pool的可用pool数和总pool数。

int arena_len = 0;
int _nfreepools =0 ;
int _ntotalpools = 0;
int i;
for(i =0; i<maxarenas;++i){
    if(arenas[i].address == 0)
        continue;
    arena_len++;
    _nfreepools += arenas[i].nfreepools ;
    _ntotalpools += arenas[i].ntotalpools ;
}

主要是这些信息:maxarenas 表示已分配arena个数,_ntotalpools 表示已分配pool个数(内存池容量为 _ntotalpools *4KB,每个pool为4KB)。


2、guppy

需要安装,
hp = guppy.hpy()

hp.heap()

可查看当前python环境变量使用内存情况(包括内存池和非内存池的)。

详细用法还有很多,可参考:

http://smira.ru/wp-content/uploads/2011/08/heapy.html


3、psutil

获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。

详细可参考:

http://www.cnblogs.com/liu-yao/p/5678157.html

时间: 2024-10-17 17:59:59

python 内存分析的相关文章

『Python』内存分析_list和array的内存增长模式

『Python』内存分析_List对象内存占用分析 在Python中,列表是一个动态的指针数组,而array模块所提供的array对象则是保存相同类型的数值的动态数组.由于array直接保存值,因此它所使用的内存比列表少.列表和array都是动态数组,因此往其中添加新元素,而没有空间保存新的元素时,它们会自动重新分配内存块,并将原来的内存中的值复制到新的内存块中.为了减少重新分配内存的次数,通常每次重新分配时,大小都为原来的k倍.k值越大,则重新分配内存的次数越少,但浪费的空间越多.本节通过一系

『Python』内存分析_List对象内存占用分析

『Python』内存分析_下_list和array的内存增长模式 list声明后结构大体分为3部分,变量名称--list对象(结构性数据+指针数组)--list内容,其中id表示的是list对象的位置, v引用变量名称,v[:]引用list对象,此规则对python其他序列结构也成立,以下示范可用id佐证, a=b时,a和b指向同一个list对象 a=b[:]时,a的list对象和b的list对象指向同一个list内容 Q1:元素存储地址是否连续 首先见得的测试一下list对象存储的内容(结构3

(一)Python入门-5函数:01函数的基本概念-内存分析-函数的分类-定义和调用

一:函数介绍 函数是可重用的程序代码块.函数的作用,不仅可以实现代码的复用,更能实现代码的 一致性.一致性指的是,只要修改函数的代码,则所有调用该函数的地方都能得到体现. 在编写函数时,函数体中的代码写法和我们前面讲述的基本一致,只是对代码实现了封 装,并增加了函数调用.传递参数.返回计算结果等内容. 函数基本概念: 1. 一个程序由一个个任务组成:函数就是代表一个任务或者一个功能. 2. 函数是代码复用的通用机制. 二:Python函数的分类 Python中函数分为如下几类: 1. 内置函数

python的内存分析和处理

这篇文章写得太好了,记录一下: 引自:https://www.jianshu.com/p/2f98dd213f04 2.内存分析和处理 程序的运行离不开对内存的操作,一个软件要运行,须将数据加载到内存中,通过CPU进行内存数据的读写,完 成数据的运算. 2.1 程序内存浅析 软件的程序在计算机中的执行,主要是通过数据单元.控制单元.执行单元共同协作,完成数据的交互达到程序处理数据的目的,在软件的执行过程中,由于系统内存和CPU的资源有限,所以有效的分解软件中的各项数据,将不同的数据加载到不同的内

python基础(内存分析,不引入第三方变量的方式交换变量的值)

a,b指向同一块内存地址 下面方法是重新给b赋值;a,b指向不同的内存地址 字符串或int类型内存分析 不引入第三方变量的方式,交换a,b的值 原文地址:https://www.cnblogs.com/jingw/p/9188511.html

转发:[Python]内存管理

本文为转发,原地址为:http://chenrudan.github.io/blog/2016/04/23/pythonmemorycontrol.html 本文主要为了解释清楚python的内存管理机制,首先介绍了一下python关于内存使用的一些基本概念,然后介绍了引用计数和垃圾回收gc模块,并且解释了分代回收和"标记-清除"法,然后分析了一下各种操作会导致python变量和对象的变化,最后做了一下小结.本来是为了解决前几天遇到把服务器内存耗光的问题,结果后来检查发现并不是因为内存

python日志分析

微秒   毫秒 datetime seek定位指针 从行尾到行首 fd.seek(-2,1)  1  当前位置 fd.tell() fd.seek(-2,2)  2   最后位置 fd.tell() fd.seek(0,0)   0  最前位置 read(1)读一位    read() 全部都读 tac与cat    行首到行尾 reversed   翻转字符串 只读一部分    通过时间判断 200 404  503  十分钟之内   第八列  apache.log 1.首先匹配时间格式, D

Python内存管理机制

1 概述 对于Python这样的动态语言,如何高效的管理内存,是很重要的一部分,在很大程度上决定了Python的执行效率.与大多数编程语言不同,Python中的变量无需事先申明,变量无需指定类型,程序员无需关心内存管理,Python解释器给你自动回收.我们知道在变量分配内存时,是借用系统资源,在使用完成后,应该归还所借用的系统资源,Python承担了这个复杂的内存管理工作,从而让程序员更加的关注程序的编写质量上. 在执行过程中,Python会频繁的创建和销毁大量的对象,这些都涉及到内存的管理.以

如何减少python内存的消耗?

Python 打算删除大量涉及像C和C++语言那样的复杂内存管理.当对象离开范围,就会被自动垃圾收集器回收.然而,对于由 Python 开发的大型且长期运行的系统来说,内存管理是不容小觑的事情. 在这篇博客中,我将会分享关于减少 Python 内存消耗的方法和分析导致内存消耗/膨胀根源的问题.这些都是从实际操作中总结的经验,我们正在构建 Datos IO 的 RecoverX 分布式备份和恢复平台,这里主要要介绍的是在 Python(在 C++ ,Java 和 bash 中也有一些类似的组件)