如何在python 2.7 32bit中获得64位进程的内存工作集?

时间:2013-04-03 11:25:59

标签: python memory python-2.7 64-bit wmi

对于自动化测试框架,我需要监视我开始的64位进程的工作集。不知何故,我找不到一个允许监控4GB以上数据的解决方案。我尝试过WMI和psutil,但两者都被卡在32位边框中。我做这样的事情:

import wmi
import psutil
import subprocess 

def measure_memory( process ):
    mem = psutil.Process( process.pid ).get_memory_info().rss
    return "%.2f M" % (float(mem)/1024./1024.)

def measure_memory_wmi( process ):
    w = wmi.WMI('.')
    result = w.query("SELECT WorkingSet FROM Win32_PerfRawData_PerfProc_Process WHERE IDProcess="+str(process.pid))
    subset = result[0]
    return "%.2f M" % (float(subset.WorkingSet)/1024./1024.)

process = subprocess.Popen( [path_to_program, '-option'] )
print measure_memory( process )
print measure_memory_wmi( process )

这提供了:

-0.00 M
4096.00 M

当流程资源管理器提供

6.806.976 K

还有另一种获取真实数据的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,在一些WMI工具/谷歌意外之后,我找到了另一种方法来表达一个提供正确数字的查询。这是新代码:

def measure_memory( process ):
    w = wmi.WMI('.')
    result = w.query("SELECT WorkingSetSize FROM Win32_Process WHERE ProcessID="+str(process.pid))
    print result
    subset = result[0]
    return "%.2f" % (float(subset.WorkingSetSize)/1024./1024.)

这似乎现在有效。任何人都可以确认这应该比我的情况更有效吗?