python - 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 似乎是使用这样的东西)
解决方案
我一直在尝试回答同样的问题。我找到的最佳答案来自
https://www.mail-archive.com/python-list@python.org/msg443129.html
根据一个简单的实验,它引用了 3-4 倍的 tracemalloc 增加内存使用量。
推荐阅读
- scala - 面临扩大akka-http服务器的问题
- node.js - 如何使用nodejs在同一文件中调用不同的函数
- asp.net-mvc - 带有 Angular 5 项目的 ASp.NET MVC - 添加没有 angular-CLI.json 文件的环境配置
- java - java.lang.NumberFormatException:空字符串无法启动活动组件信息
- spring-boot - 杰克逊如何在过渡之外序列化对象
- python - 如何查看动态库文件(.dylib)的函数定义?
- android - RecyclerView.OnItemTouchListener 不定期调用 OnItemClick 和 onLongItemClick
- git - 根据文件夹设置 git 凭据
- python - ValueError:信号仅在连接到 BIG IP 设备时在主线程错误中起作用
- ios - 如何在iOS中滑动离子滑动时禁用垂直滚动?