gpt4 book ai didi

python - python tracemalloc 模块分配统计信息何时会与 ps 或 pmap 中显示的不匹配?

转载 作者:太空狗 更新时间:2023-10-30 02:37:26 24 4
gpt4 key购买 nike

我正在尝试追踪内存泄漏,所以我已经完成了

import tracemalloc
tracemalloc.start()

<function call>

# copy pasted this from documentation
snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('lineno')

print("[ Top 10 ]")
for stat in top_stats[:10]:
print(stat)

这显示没有主要分配,所有内存分配都非常小,而我看到在 pspmap 中分配了 8+ GB 内存(运行前后检查命令,并在运行垃圾收集之后)。此外,tracemalloc.get_traced_memory 确认 tracemalloc 没有看到很多分配。 pympler 也看不到分配。

有人知道什么时候会出现这种情况吗?一些模块正在使用 cython,这会导致 tracemalloc 出现问题吗?

在 pmap 中分配看起来像:

0000000002183000 6492008 6491876 6491876 rw--- [匿名]

最佳答案

来自 tracemalloc 上的文档:

tracemalloc 模块是一个调试工具,用于跟踪由 Python 分配的内存块。

换句话说,tracemalloc 看不到不是由 python 解释器分配的内存。这将包括 PyMalloc 在 C-API 级别未执行的任何操作,包括通过扩展使用的 native 代码或使用 malloc 的扩展代码调用的所有标准 libc malloc 直接。

如果没有代码重现,就无法确定这里是否是这种情况。您可以尝试通过 valgrind 等在 python 外部运行 native 代码部分,以检测 native 代码中的内存泄漏。

如果有执行 malloc 的 cython 代码,可以切换到 PyMalloc 来跟踪它。

关于python - python tracemalloc 模块分配统计信息何时会与 ps 或 pmap 中显示的不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50148554/

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