首页 > 解决方案 > tracemalloc 的开销有多大?

问题描述

我想在生产系统中登录 Python 脚本的当前内存使用情况。AWS 有Container Insights,但它们隐藏得非常好,我不确定如何在其他仪表板/日志记录和更改系统中正确使用它们。另外,我不确定日志峰值内存是否存在。

Python 脚本是生产系统。它在 Docker 容器中的 AWS 上运行,我遇到了以前的方法(链接)的问题。

tracemalloc似乎能够给我我想要的信息:

# At the start of the script
import tracemalloc
tracemalloc.start()

# script running...

# At the end
current, peak = tracemalloc.get_traced_memory()
logger.info(f"Current memory usage is {current / 10**6} MB")
logger.info(f"Peak memory usage was {peak / 10**6} MB")
tracemalloc.stop()

但是,文档状态:

tracemalloc 模块是一个调试工具

那么将其包装在生产代码中会是一个坏主意吗?它有多少开销?还有其他理由不在生产中使用它吗?

(我非常清楚代码的哪些部分需要最多内存以及达到峰值内存的位置。我想监视那部分(或者更确切地说是那些少数对象/几行代码的大小)。替代tracemalloc 似乎是使用这样的东西

标签: pythonmemorytracemalloc

解决方案


我一直在尝试回答同样的问题。我找到的最佳答案来自

https://www.mail-archive.com/python-list@python.org/msg443129.html

根据一个简单的实验,它引用了 3-4 倍的 tracemalloc 增加内存使用量。


推荐阅读