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

psutil升级至5.9.0后调用mem.dirty报AttributeError如何解决

问题根因

psutil 5.7.0及以上版本调整了跨平台API的字段返回规则:

  • psutil.virtual_memory()返回结果中的dirty(脏页内存)字段是Linux、macOS、BSD等类Unix系统的专属字段,Windows平台原生不提供该统计值
  • 5.6.6及更早版本会对当前平台不支持的统计字段返回0作为占位值,因此直接访问mem.dirty不会触发属性错误
  • 5.7.0之后的版本移除了非支持平台的无效占位字段,升级到5.9.0版本后,在不支持该字段的平台下直接访问mem.dirty就会抛出*AttributeError: psutil has no attribute 'dirty'*异常。
修复方案

可根据项目实际部署场景选择以下任意一种方案修复:

  • 跨平台兼容适配(推荐):通过属性兜底读取的方式对齐旧版本逻辑,在不支持dirty字段的平台下默认返回0,无需判断平台、无需锁定依赖版本,兼容全平台、全psutil版本,修改后代码如下:
import psutil
mem = psutil.virtual_memory()
# 优先读取真实dirty字段值,属性不存在时兜底返回0
mem_dirty = getattr(mem, "dirty", 0)
x.add_metric(schema.yy_MEMORY_DIRTY, mem_dirty)
  • 锁定依赖版本:如果项目仅在支持dirty字段的类Unix系统部署,且暂时不想修改业务代码,可以在依赖配置文件中锁定psutil版本为兼容的旧版本,例如在requirements.txt中声明psutil==5.6.6即可恢复原有运行逻辑。
  • 平台专属采集:如果需要在Windows平台获取准确的脏页内存指标,不要依赖psutil的通用接口,可通过调用Windows原生GlobalMemoryStatusEx系统API单独采集对应数值后,再传入指标上报方法。

内容的提问来源于stack exchange,提问作者Amit Kumar Manjhi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:33:15