问题标签 [tracemalloc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 使用 tracemalloc.take_snapshot() 时出现 Python MemoryError
我正在研究 Python,我有兴趣了解进程中使用的内存。为此,我正在使用 Python 的 tracemalloc 库:
无论如何,当我运行我的程序时,我收到以下错误
如果我不使用tracemalloc.take_snapshot()
,我的代码运行良好,但是当我使用它时,我得到了提到的错误。
我不知道是什么导致了错误,也不知道如何解决它。
因此,我写这篇文章,希望有人可以帮助我解决这个问题。
谢谢 :)
PD:我正在使用的代码是针对大学作业的,作业的说明指定我应该使用tracemalloc.take_snapshot()
,因此更改测量内存的方法对我来说不是一个选择。
**更新**
我已经设法解决了这个问题。我在 64 位计算机上运行旧的 32 位版本的 python (v3.8)。因此,我将 python 更新到最新的 64 位版本,问题就消失了。我不知道问题是否与 python 的版本有关并且它是 32 位版本,但这解决了我的问题。我希望这会有所帮助,如果有人有同样的问题。python - 在 colab 单元执行后持续存在的内存泄漏
我遇到了微妙的内存泄漏,无法使用tracemalloc确定源。我在 google colab 中运行以下代码,旨在优化自定义ppo代理的超参数。此外,泄漏发生的速度也各不相同:有时它会在运行时的 10-20 分钟/5-10 次迭代内发生,而其他时候可能需要 50 次迭代/几个小时。这是一个包含完整代码的 colab笔记本。
这就是我运行的:
这会导致内存迅速膨胀,直到会话崩溃。
如果我在单元崩溃之前停止它,内存问题会一直存在,直到运行时重新启动。
以下是崩溃前 15 次连续迭代产生的内存快照,它们没有显示任何特定的危险信号。此外,通过总结size
最近快照的列,总共有 967249710 字节 ~= 1GB,这很奇怪,因为 colab 上的可用内存 ~= 12GB。以下是前 23 个回溯:
这是崩溃日志之一:
python - Python tracmealloc.get_traced_memory() 做什么?
所以我想看2种算法的内存消耗?我的计划是在算法之前、算法之后获取内存消耗,然后减去结果。
所以我试了一下:
但无论出于何种原因,输出总是在 400 到 2000 之间变化?我并没有真正落后。谢谢 :)
python - tracemalloc 模块分配了什么样的内存
tracemalloc 模块在程序执行过程中分配了什么样的内存?RAM内存是什么?根据文档:它们被分配了内存块。但它是 RAM 内存吗?
python-3.x - 了解小列表的 tracemalloc 输出
我正在运行以下简单的脚本来熟悉一下tracemalloc
:
display_custom
只是对 https://docs.python.org/3/library/tracemalloc.html 的display_top
轻微修改。我得到以下输出:
第 72 行到底发生了什么?为什么其他更大的列表只使用一个块时使用两个块?为什么内存是5264字节?(对于具有一个块内存的所有条目,只有 8* 个元素)
下面是我用于复制的实际代码的缩短版本。我上面的代码的唯一区别是
- 我不导入(未使用的)包,
- 我删除了两个未使用的函数定义(不同版本的漂亮打印函数)和
- 我删除了一些被注释掉的行。
没有其他任何变化,所以我不希望内存分配发生变化。结果类似于我之前得到的结果(但不完全相同)。
输出是:
python - 使用 tracemalloc 测量分配的内存
Python 模块tracemalloc提供了对程序分配内存的详细了解。例如,一个用例是记录当前和峰值内存使用情况:
如果我们现在想要重置峰值,文档建议使用tracemalloc.reset_peak()
. 但是,这个功能只是在 Python 3.9 中添加的,我想知道我是否可以达到相同的效果tracemalloc.clear_traces()
?
我的用例是这样的:
所以对于i
for循环中的每一个,我都会做某事并且只想测量我创建的内存。峰值应该只针对每个索引,而不是针对全局运行,这就是我要清除它的原因。
编辑:为了测试和之间的区别reset_peak()
,clear_traces()
我测试了这个程序:
当我测试clear_traces()
时,输出是:
当我改为使用reset_peak()
时,我获得:
为什么这两种方法在显示的内存量上存在差异?
apache - 如何跟踪 Apache httpd 服务器中的内存分配?
我正在使用本地运行的服务器 [httpd2.4.52] 运行 apache 基准测试 (ab)。我想跟踪服务器分配了多少内存以及分配了多少大小。我运行 'valgrind --trace-malloc=yes ab -n 10 http://127.0.0.1/' 但无论请求数量如何,分配的数量约为 4.6k(我尝试了 10,100,1000)。
- 这是因为 Apache 使用了自己的自定义内存分配器吗?
- 如何跟踪此自定义分配器的分配(特别是#allocations,分配的总/平均大小)?
- 这个页面在 apr 代码中提到了一个名为 ALLOC_USE_MALLOC 的选项,但是,我在 apr 源代码中找不到这个选项(我检查了 1.7.0、1.4.8、1.4.2 和 httpd2.0.51 版本)