You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Task Manager与Python psutil测量的进程内存存在差异?

问题:psutil测量内存与Windows任务管理器不一致的原因及解决方法

问题背景

使用Python 3.12.2 x64 + psutil 5.9.8在Windows 10 Pro x64下编写脚本记录应用内存使用时,发现psutil测量的结果始终比Windows任务管理器显示的高4-10MB,需要找到原因并获取与任务管理器一致的指标(用于和软件提供商对齐调试)。

当前使用的代码:

import psutil
import sys

def get_memory_use_of_process(target_process_name ):
    try:
        for proc in psutil.process_iter(['name', 'memory_percent', 'memory_info']):
            if target_process_name.lower() in proc.info['name'].lower().strip():
                # 原注释认为memory_info[0]对应任务管理器的“Mem Usage”
                return proc.info['memory_info'][0]/1024/1024 # 转换为MB
    except:
        sys.exit()
    else:
        sys.exit("No needed process found")

差异原因

  1. 指标定义不匹配
    psutil的memory_info()[0](即wset字段)对应Windows的工作集(Working Set),包含进程加载的所有内存页——包括和其他进程共享的部分(比如系统通用DLL)。而Windows 10任务管理器默认显示的“内存”列,实际对应的是专用工作集(Private Working Set),仅统计进程独占、无法与其他进程共享的内存页。这是两者数值差异的核心原因。
  2. 采样时机微小差异
    内存使用是动态变化的,任务管理器和psutil的采样时间点可能略有不同,会导致极小的数值波动,但这部分差异远小于4-10MB。

正确测量方法

要和任务管理器显示的结果一致,需要获取专用工作集指标,对应psutil中的memory_info().private字段(或元组索引[6])。修改后的代码如下:

import psutil
import sys

def get_memory_use_of_process(target_process_name ):
    try:
        for proc in psutil.process_iter(['name', 'memory_info']):
            if target_process_name.lower() in proc.info['name'].lower().strip():
                # 获取专用工作集,与任务管理器默认“内存”列一致
                return proc.info['memory_info'].private / 1024 / 1024
    except Exception as e:
        sys.exit(f"Error: {str(e)}")
    else:
        sys.exit("No needed process found")

验证步骤

  1. 打开任务管理器,右键“内存”列,选择“选择列”,确认当前显示的是“专用工作集”。
  2. 运行修改后的脚本,对比数值,应该和任务管理器显示的结果基本一致(误差在1MB以内)。

内容的提问来源于stack exchange,提问作者Araneus0390

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:37:23