找不到Python程序大量DATA列内存消耗的来源

问题描述 投票:0回答:1

我正在开发一个 python 应用程序,其中有很多我自己的包和类,其中 RAM 约束非常重要。我正在使用 timeout 实用程序从外部监视此约束。令我惊讶的是,如果 VM 限制低于 1.5GB,我的程序一开始就会无提示地失败。

为了调查,我使用了 psutil 的 memory_info 来更深入地了解正在发生的事情。我已将此方法放在

if __name__ == '__main__':
块的最开头(因此,在执行程序的任何逻辑之前)。这是结果:
pmem(rss=94330880, vms=792522752, shared=35758080, text=2834432, lib=0, data=650641408, dirty=0)

所以

data
字段在程序一开始就已经占用了650MB!我想也许问题出在
main.py
顶部的导入,这里是
tracemalloc
的输入:

<frozen importlib._bootstrap_external>:672: size=105 KiB, count=973, average=111 B
/usr/lib/python3.10/abc.py:106: size=4326 B, count=11, average=393 B
/usr/lib/python3.10/statistics.py:1051: size=2585 B, count=10, average=258 B
/usr/lib/python3.10/abc.py:107: size=2520 B, count=42, average=60 B
/usr/lib/python3.10/statistics.py:436: size=2352 B, count=2, average=1176 B
<frozen importlib._bootstrap_external>:128: size=2339 B, count=17, average=138 B
/home/tatiana/Documents/project/utils/utils.py:6: size=1944 B, count=12, average=162 B
/usr/lib/python3.10/statistics.py:144: size=1928 B, count=10, average=193 B
/home/tatiana/Documents/project/package/Seed.py:5: size=1872 B, count=8, average=234 B
/usr/lib/python3.10/collections/__init__.py:481: size=1835 B, count=8, average=229 B

所以进口似乎不是问题。在虚拟机上,从 Github 下载项目后,我得到了 DATA 字段的 250MB 消耗,虽然少了一些,但仍然大得不合理。在我的机器和虚拟机上,我都在使用 Ubuntu 22.04。

任何进一步调查此问题的方向将不胜感激!

python memory-management virtual-memory
1个回答
0
投票

我会建议你看看内存分析器

pip install memory-profiler

© www.soinside.com 2019 - 2024. All rights reserved.