1

对于自动化测试框架,我需要监控我启动的 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

还有其他方法可以获取真实数据吗?

谢谢!

4

1 回答 1

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.)

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

于 2013-04-03T12:36:18.400 回答