gpt4 book ai didi

Python psutil memory_info 上限为 4.0G

转载 作者:太空宇宙 更新时间:2023-11-03 20:30:57 25 4
gpt4 key购买 nike

我正在尝试使用 python psutil 模块按内存消耗列出 Windows 中所有正在运行的进程并对其进行排序。但是,当我查询进程 memory_info 属性时,各种指标都不会超过 4 GB。为什么这是有限的?我该如何解决这个问题?

我确实尝试使用 proc.memory_full_info() 理论上可以通过 uss 内存指标解决这个问题,但是我无法弄清楚如何在不导致错误的情况下做到这一点AccessDenied 错误。

示例脚本:

import psutil
from psutil._common import bytes2human

procs = [p.info for p in psutil.process_iter(attrs=['memory_info', 'memory_percent', 'name'])]

for proc in sorted(procs, key=lambda p: p['memory_percent'], reverse=True):
print("{} - {}".format(proc['name'], bytes2human(getattr(proc['memory_info'], 'rss'))))

我愿意接受任何其他分析内存使用情况的方法,psutil 似乎是我发现的最好的工具。

最佳答案

您正在使用32位Python。默认情况下,32 位 进程具有 4GiB 内存限制。在软件级别,该限制来自底层C类型限制(psutil的核心是用C编写的)。
例如,几乎所有[MS.Docs]: PROCESS_MEMORY_COUNTERS structure成员的类型为 SIZE_T

示例:

  • 32 位:

    >>> import sys, ctypes
    >>> from ctypes import wintypes
    >>> sys.version
    '3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 21:26:53) [MSC v.1916 32 bit (Intel)]'
    >>>
    >>> ctypes.sizeof(wintypes.DWORD), ctypes.sizeof(ctypes.c_size_t), ctypes.sizeof(wintypes.HANDLE)
    (4, 4, 4)
  • 64 位:

    >>> import sys, ctypes
    >>> from ctypes import wintypes
    >>> sys.version
    '3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)]'
    >>>
    >>> ctypes.sizeof(wintypes.DWORD), ctypes.sizeof(ctypes.c_size_t), ctypes.sizeof(wintypes.HANDLE)
    (4, 8, 8)

有关如何区分不同 CPU 架构 Python 进程的更多详细信息,请查看:[SO]: How do I determine if my python shell is executing in 32bit or 64bit mode on OS X? (@CristiFati's answer)

关于Python psutil memory_info 上限为 4.0G,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57513359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com