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

Posted

技术标签:

【中文标题】如何在 python 2.7 32bit 中获取 64bit 进程的内存工作集?【英文标题】:How to get the memory working set of a 64bit process in python 2.7 32bit? 【发布时间】:2013-03-25 01:00:58 【问题描述】:

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

好的,在一些 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.)

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

【讨论】:

以上是关于如何在 python 2.7 32bit 中获取 64bit 进程的内存工作集?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python 2.7中获取随机整数[重复]

安装python2.7.13-64bit & Pycharm在两个python版本之间切换

python 2.7和3.7都支持的情况 bit_length() pycharm 更改解释器

Python 2.7,如何获取/检查列表的大小? [复制]

如何在python 2.7中使用pymongo进行多处理池

如何在 GTK3 和 Python 2.7 中的图像对象上创建“点击事件”