PYTHON中什么模块可以检查程序的内存很使用情况

时间:2022-10-24 22:31:30
PYTHON中有没有什么模块可以检查程序的内存使用情况,如堆上分配了多少空间了?等?

16 个解决方案

#1


os.popen(command)
我只知道命令行方式

#2


os.popen(command)
我只知道命令行方式 

????  

ms和我问的问题不太相干

#3


用任务管理器吧……
或者你也可以调用C API来查看操作系统为此进程分配的内存。
至于Python的内置模块,不清楚是不是有相关的东西。

#4



估计多半真的是没有。

#5


自顶一下,看看还有没有希望

#6


前些时候下了个Python Memory Validator,可惜装好之后不知道怎么用……

#7


保持关注

#8


只在win平台用的話可以考慮用wmi

#9


wmi??? 能不能具体一些??  多谢

#10


自顶, 麻烦关注

#11


楼主,前段时间我也在找这个问题
你看一下 官网:http://support.hyperic.com/display/SIGAR/Home

The Sigar API provides a portable interface for gathering system information such as: 

    * System memory, swap, cpu, load average, uptime, logins 
    * Per-process memory, cpu, credential info, state, arguments, environment, open files 
    * File system detection and metrics 
    * Network interface detection, configuration info and metrics 
    * Network route and connection tables 


安装
http://support.hyperic.com/display/SIGAR/Home 
git clone git://github.com/hyperic/sigar.git sigar.git 
./autogen.sh 
./configure 
make 
make install 
cd bindings/python/ 
python setup.py install 

几个测试的脚本
import os, sigar; 

sg = sigar.open() 
mem = sg.mem() 
swap = sg.swap() 
sg.close() 

print "\tTotal\tUsed\tFree" 

print "Mem:\t",\ 
    (mem.total() / 1024), \ 
    (mem.used() / 1024), \ 
    (mem.free() / 1024) 

print "Swap:\t", \ 
    (swap.total() / 1024), \ 
    (swap.used() / 1024), \ 
    (swap.free() / 1024) 

print "RAM:\t", mem.ram(), "MB" 


import os, sigar; 

sg = sigar.open() 
fslist = sg.file_system_list() 

def format_size(size): 
    return sigar.format_size(size * 1024) 

print 'Filesystem\tSize\tUsed\tAvail\tUse%\tMounted on\tType\n' 

for fs in fslist: 
    dir_name = fs.dir_name() 
    usage = sg.file_system_usage(dir_name) 

    total = usage.total() 
    used = total - usage.free() 
    avail = usage.avail() 
    pct = usage.use_percent() * 100 
    if pct == 0.0: 
        pct = '-' 

    print fs.dev_name(), format_size(total), format_size(used), format_size(avail),\ 
        pct, dir_name, fs.sys_type_name(), '/', fs.type_name() 



#12


mark

#13


3ks

#14


#coding:gbk
#author's blog:http://eatsalt.blog.163.com

from ctypes import *
class MEMORYSTATUS(Structure):
  _fields_ =[('dwLength',c_int),('dwMemoryLoad',c_int),('dwTotalPhys',c_int),('dwAvailPhys',c_int),('dwTotalPageFile',c_int),
  ('dwAvailPageFile',c_int),('dwTotalVirtual',c_int),('dwAvailVirtual',c_int)] 
MEMORYSTATUS=MEMORYSTATUS()
windll.kernel32.GlobalMemoryStatus(byref(MEMORYSTATUS))
print '已占用内存百分比:',MEMORYSTATUS.dwMemoryLoad
print '物理内存总数:',MEMORYSTATUS.dwTotalPhys
print '可用物理内存:',MEMORYSTATUS.dwAvailPhys

linux编程没学过,很遗憾因此没能给出平台通用代码。。。

#15


引用 14 楼 wooogooo 的回复:
#coding:gbk
 #author's blog:http://eatsalt.blog.163.com

 from ctypes import *
 class MEMORYSTATUS(Structure):
   _fields_ =[('dwLength',c_int),('dwMemoryLoad',c_int),('dwTotalPhys',c_int),('dwAvailPhys',c_int),('dwTotalPageFile',c_int),
   ('dwAvailPageFile',c_int),('dwTotalVirtual',c_int),('dwAvailVirtual',c_int)]
 MEMORYSTATUS=MEMORYSTATUS()
 windll.kernel32.GlobalMemoryStatus(byref(MEMORYSTATUS))
 print '已占用内存百分比:',MEMORYSTATUS.dwMemoryLoad
 print '物理内存总数:',MEMORYSTATUS.dwTotalPhys
 print '可用物理内存:',MEMORYSTATUS.dwAvailPhys

 linux编程没学过,很遗憾因此没能给出平台通用代码。。。

这个方法可以获取全局的进程使用情况,但是不能获得本进程的内存使用情况撒

#16


该回复于2011-05-12 17:19:49被版主删除

#1


os.popen(command)
我只知道命令行方式

#2


os.popen(command)
我只知道命令行方式 

????  

ms和我问的问题不太相干

#3


用任务管理器吧……
或者你也可以调用C API来查看操作系统为此进程分配的内存。
至于Python的内置模块,不清楚是不是有相关的东西。

#4



估计多半真的是没有。

#5


自顶一下,看看还有没有希望

#6


前些时候下了个Python Memory Validator,可惜装好之后不知道怎么用……

#7


保持关注

#8


只在win平台用的話可以考慮用wmi

#9


wmi??? 能不能具体一些??  多谢

#10


自顶, 麻烦关注

#11


楼主,前段时间我也在找这个问题
你看一下 官网:http://support.hyperic.com/display/SIGAR/Home

The Sigar API provides a portable interface for gathering system information such as: 

    * System memory, swap, cpu, load average, uptime, logins 
    * Per-process memory, cpu, credential info, state, arguments, environment, open files 
    * File system detection and metrics 
    * Network interface detection, configuration info and metrics 
    * Network route and connection tables 


安装
http://support.hyperic.com/display/SIGAR/Home 
git clone git://github.com/hyperic/sigar.git sigar.git 
./autogen.sh 
./configure 
make 
make install 
cd bindings/python/ 
python setup.py install 

几个测试的脚本
import os, sigar; 

sg = sigar.open() 
mem = sg.mem() 
swap = sg.swap() 
sg.close() 

print "\tTotal\tUsed\tFree" 

print "Mem:\t",\ 
    (mem.total() / 1024), \ 
    (mem.used() / 1024), \ 
    (mem.free() / 1024) 

print "Swap:\t", \ 
    (swap.total() / 1024), \ 
    (swap.used() / 1024), \ 
    (swap.free() / 1024) 

print "RAM:\t", mem.ram(), "MB" 


import os, sigar; 

sg = sigar.open() 
fslist = sg.file_system_list() 

def format_size(size): 
    return sigar.format_size(size * 1024) 

print 'Filesystem\tSize\tUsed\tAvail\tUse%\tMounted on\tType\n' 

for fs in fslist: 
    dir_name = fs.dir_name() 
    usage = sg.file_system_usage(dir_name) 

    total = usage.total() 
    used = total - usage.free() 
    avail = usage.avail() 
    pct = usage.use_percent() * 100 
    if pct == 0.0: 
        pct = '-' 

    print fs.dev_name(), format_size(total), format_size(used), format_size(avail),\ 
        pct, dir_name, fs.sys_type_name(), '/', fs.type_name() 



#12


mark

#13


3ks

#14


#coding:gbk
#author's blog:http://eatsalt.blog.163.com

from ctypes import *
class MEMORYSTATUS(Structure):
  _fields_ =[('dwLength',c_int),('dwMemoryLoad',c_int),('dwTotalPhys',c_int),('dwAvailPhys',c_int),('dwTotalPageFile',c_int),
  ('dwAvailPageFile',c_int),('dwTotalVirtual',c_int),('dwAvailVirtual',c_int)] 
MEMORYSTATUS=MEMORYSTATUS()
windll.kernel32.GlobalMemoryStatus(byref(MEMORYSTATUS))
print '已占用内存百分比:',MEMORYSTATUS.dwMemoryLoad
print '物理内存总数:',MEMORYSTATUS.dwTotalPhys
print '可用物理内存:',MEMORYSTATUS.dwAvailPhys

linux编程没学过,很遗憾因此没能给出平台通用代码。。。

#15


引用 14 楼 wooogooo 的回复:
#coding:gbk
 #author's blog:http://eatsalt.blog.163.com

 from ctypes import *
 class MEMORYSTATUS(Structure):
   _fields_ =[('dwLength',c_int),('dwMemoryLoad',c_int),('dwTotalPhys',c_int),('dwAvailPhys',c_int),('dwTotalPageFile',c_int),
   ('dwAvailPageFile',c_int),('dwTotalVirtual',c_int),('dwAvailVirtual',c_int)]
 MEMORYSTATUS=MEMORYSTATUS()
 windll.kernel32.GlobalMemoryStatus(byref(MEMORYSTATUS))
 print '已占用内存百分比:',MEMORYSTATUS.dwMemoryLoad
 print '物理内存总数:',MEMORYSTATUS.dwTotalPhys
 print '可用物理内存:',MEMORYSTATUS.dwAvailPhys

 linux编程没学过,很遗憾因此没能给出平台通用代码。。。

这个方法可以获取全局的进程使用情况,但是不能获得本进程的内存使用情况撒

#16


该回复于2011-05-12 17:19:49被版主删除