python计算非内置数据类型占用内存
getsizeof的局限
python非内置数据类型的对象无法用sys.getsizeof()获得真实的大小,例:
import networkx as nx
import sys
G = nx.Graph()
l = [i for i in xrange(10000)]
print "size of l:", sys.getsizeof(l)
G.add_nodes_from(l)
print "size of graph:", sys.getsizeof(G)
结果
size of l: 87632
size of graph: 64
分析
图graph中包含点序列l,而大小还不如l的大小,所以用getsizeof计算python的非内置类型的对象大小时是不准的。
使用psutil模块获取内存
例1:
import networkx as nx
import psutil
import sys
import os
G = nx.Graph()
l = [i for i in xrange(10000)]
print "size of l:", sys.getsizeof(l)
G.add_nodes_from(l)
print "size of graph:", sys.getsizeof(G)
process = psutil.Process(os.getpid())
max_mem = process.memory_info().rss
print 'max_mem:', max_mem
这样得到的有问题,需要把一开始系统所占的内存去掉
import psutil
import sys
import os process = psutil.Process(os.getpid()) max_mem_1 = process.memory_info().rss
print 'max_mem:', max_mem_1 G = nx.Graph()
l = [i for i in xrange(10000)]
G.add_nodes_from(l) max_mem_2 = process.memory_info().rss
print 'max_2:', max_mem_2
print 'max_mem:', max_mem_2 - max_mem_1
结果
max_mem: 23724032
max_2: 31637504
max_mem: 7913472
例2:
import psutil
import os
import sys
from datetime import datetime process = psutil.Process(os.getpid()) max_mem_1 = process.memory_info().rss / 1024.0 / 1024.0 / 1024.0
print 'max_mem 1:', max_mem_1 all_road_nx = 'a' * 1024 * 1024 * 1024 * 10;
print 'size:', sys.getsizeof(all_road_nx)/ 1024.0 / 1024.0 / 1024.0
print 'len all_road_nx:', len(all_road_nx) max_mem_2 = process.memory_info().rss / 1024.0 / 1024.0 / 1024.0
print 'max_mem 2:', max_mem_2 print 'max_mem 3:', max_mem_2 - max_mem_1
结果:
max_mem 1: 0.00862503051758
size: 10.0000000345
len all_road_nx: 10737418240
max_mem 2: 10.0086517334
max_mem 3: 10.0000267029
python模块psutil简介
psutil提供了个接口,可以用来获取信息,包括:
- 当前运行的进程
- 系统(资源使用)信息
- CPU
- 内存
- 磁盘
- 网络
- 用户
psutil实现了很多功能,包括了如下工具所具有的:
- ps
- top
- df
- kill
- free
- lsof
- free
- netstat
- ifconfig
- nice
- ionice
- iostat
- iotop
- uptime
- pidof
- tty
- who
- taskset
- pmap
psutil获取系统状态举例
#! coding:utf-8
import networkx as nx
import psutil
import sys
import os p = psutil.Process(os.getpid()) psutil.pids() #查看系统全部进程
p = psutil.Process(6241) #查看系统全部进程
print "name:", p.name() #进程名
print "bin 路径", p.exe() #进程的bin路径
print "进程绝对路径", p.cwd() #进程的工作目录绝对路径
print "进程状态", p.status() #进程状态
print "进程创建时间", p.create_time() #进程创建时间
print "进程uuid信息", p.uids() #进程uid信息
print "进程gid信息", p.gids() #进程的gid信息
print "进程的cpu时间信息", p.cpu_times() #进程的cpu时间信息,包括user,system两个cpu信息
print "get进程cpu亲和度", p.cpu_affinity() #get进程cpu亲和度,如果要设置cpu亲和度,将cpu号作为参考就好
print "进程内存利用率", p.memory_percent() #进程内存利用率
print "进程内存rss,vms信息", p.memory_info() #进程内存rss,vms信息
print "进程的IO信息", p.io_counters() #进程的IO信息,包括读写IO数字及参数
print "进程列表", p.connections() #返回进程列表
print "进程开启的线程数", p.num_threads() #进程开启的线程数
结果
name: python
bin 路径 /home/tops/bin/python2.7
进程绝对路径 /home/jihite/iu_iso_test
进程状态 sleeping
进程创建时间 1463322002.74
进程uuid信息 puids(real=124674, effective=124674, saved=124674)
进程gid信息 pgids(real=100, effective=100, saved=100)
进程的cpu时间信息 pcputimes(user=14.38, system=2.38, children_user=0.0, children_system=0.0)
get进程cpu亲和度 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]
进程内存利用率 0.0432284208934
进程内存rss,vms信息 pmem(rss=58548224, vms=534482944, shared=6922240, text=1536000, lib=0, data=268894208, dirty=0)
进程的IO信息 pio(read_count=4166, write_count=1192, read_bytes=0, write_bytes=0)
进程列表 [pconn(fd=3, family=2, type=1, laddr=('10.184.70.11', 57785), raddr=('10.184.70.13', 8018), status='ESTABLISHED')]
进程开启的线程数 4
python计算非内置数据类型占用内存的更多相关文章
- Python内置数据类型之Dictionary篇
1.查看函数XXX的doc string. Python的函数是有属性的,doc string便是函数的属性.所以查看函数XXX的属性的方法是模块名.XXX.__doc__ 2.模块的属性 每个模块都 ...
- Python中内置数据类型list,tuple,dict,set的区别和用法
Python中内置数据类型list,tuple,dict,set的区别和用法 Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, ...
- Python的四个内置数据类型list, tuple, dict, set
Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, tuple, dict, set.这里对他们进行一个简明的总结. List ...
- Python笔记004-Python最基本内置数据类型和运算符
第二章(1)Python编程基础概念 1. 最基本内置数据类型和运算符 每个对象都有类型,Python 中最基本的内置数据类型: 1. 整数 整数,2345 ,10 ,50 2. 浮点型 小数,3.1 ...
- Python内置数据类型总结
python的核心数据类型:(很多语言之提供了数字,字符串,文件数据类型,其他形式的数据类型都以标准库的形式表示 也就是用之前需要import ) ,但是python有很多都是内置的,不需要impor ...
- Python作业---内置数据类型
实验2 内置数据类型 实验性质:验证性 一.实验目的 1.掌握内置函数.列表.切片.元组的基本操作: 2.掌握字典.集合和列表表达式的基本操作. 二.实验预备知识 1.掌握Python内置函数的基/本 ...
- 笔记-pyton内置数据类型
笔记-pyton内置数据类型 1. 简介 The principal built-in types are numerics, sequences, mappings, classes, i ...
- 二、JAVA基本数据类型:内置数据类型,引用类型
变量的值存储在内存中,内存管理系统通过变量的类型分配存储空间,且该空间只能存储该类型数据,通过定义不同的变量,在内存中储存不同类型的数据. JAVA的两大数据类型 1. 内置数据类型 2.引用数据类型 ...
- Hive内置数据类型
Hive的内置数据类型可以分为两大类:(1).基础数据类型:(2).复杂数据类型.其中,基础数据类型包括:TINYINT,SMALLINT,INT,BIGINT,BOOLEAN,FLOAT,DOUBL ...
随机推荐
- tomcat从下载到使用
话说,某天正在和周公聊天下大事.被急促的电话铃声召唤回来,所谓江湖救急,于是远程一看.竟然是需要使用tomcat(汤姆家的猫),于是... 下面关于下载和配置tomcat的过程. ①.使用tomcat ...
- T-SQL DBMS
dbo 默认架构schema 从一个数据库操作另个数据库的表的时候,要select * from 数据库.dbo.biao 表名前面的dbo是一个默认架构schema,一个架构还有 ...
- Gitolite配置管理和GIT基本操作
简述公司版gitolite的项目配置与管理 1. 基于秘钥对的管理 1.1 客户端(需要访问代码库的机器)生成秘钥对,采用RSA加密ssh-keygen -t rsa -f path_to_store ...
- [ZZ] cbuffer和tbuffer
http://blog.chinaunix.net/uid-20235103-id-2578297.html Shader Model 4支持的新东西,通过打包数据可以获得更好的性能.原文转发:Sha ...
- Apache Storm 衍生项目之2 -- Trident-ML
欢迎转载,转载请注明出处,徽沪一郎,谢谢. 楔子 或许谈起storm是大数据实时计算框架已经让你不明觉厉,如果说storm还可以跟机器学习算法(ml)有机的结合在一起,是不是更加觉着高大尚呢.trid ...
- [转]PHP高效率写法(详解原因)
1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍. 当然了,这个测试方法需要在十万级以上次执行,效果才明显. 其实静态方法和非静 ...
- Bootstrap页面布局7 - Bootstrap响应式布局的实用类
在bootstrap-responsive.css这个CSS样式表中已经为我们设定好了几个实用的类: .visible-phone: 在智能手机设备上显示这个元素,在其他设备上隐藏该元素 .visib ...
- Shell-bash中特殊字符汇总[转]
转自http://www.linuxidc.com/Linux/2015-08/121217.htm 首先举例一个bash脚本 #!/bin/bash file=$1 files=`find / -n ...
- WIN7 64位系统下的服务程序更新失败问题解决
自己用DELPHI做了个小的服务在后台运行,帮助自己做一些琐事,今天修改了一下代码结果重启服务的时候一直还是以前的状态,新加的代码没任何效果. 1.检查程序没问题呀 2.关闭SSD缓存硬盘问题仍旧 3 ...
- what a fuck postgre update sql
================= what a fuck postgre update sql ================= UPDATE temp_group_temp set group_ ...