问题标签 [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.

0 投票
0 回答
41 浏览

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 位版本,但这解决了我的问题。我希望这会有所帮助,如果有人有同样的问题。
0 投票
0 回答
272 浏览

python - 在 colab 单元执行后持续存在的内存泄漏

我遇到了微妙的内存泄漏,无法使用tracemalloc确定源。我在 google colab 中运行以下代码,旨在优化自定义ppo代理的超参数。此外,泄漏发生的速度也各不相同:有时它会在运行时的 10-20 分钟/5-10 次迭代内发生,而其他时候可能需要 50 次迭代/几个小时。这是一个包含完整代码的 colab笔记本。

这就是我运行的:

这会导致内存迅速膨胀,直到会话崩溃。

崩溃前

如果我在单元崩溃之前停止它,内存问题会一直存在,直到运行时重新启动。

膨胀的记忆持续存在

以下是崩溃前 15 次连续迭代产生的内存快照,它们没有显示任何特定的危险信号。此外,通过总结size最近快照的列,总共有 967249710 字节 ~= 1GB,这很奇怪,因为 colab 上的可用内存 ~= 12GB。以下是前 23 个回溯:

追溯

这是崩溃日志之一:

0 投票
0 回答
68 浏览

python - Python tracmealloc.get_traced_memory() 做什么?

所以我想看2种算法的内存消耗?我的计划是在算法之前、算法之后获取内存消耗,然后减去结果。

所以我试了一下:

但无论出于何种原因,输出总是在 400 到 2000 之间变化?我并没有真正落后。谢谢 :)

0 投票
0 回答
13 浏览

python - tracemalloc 模块分配了什么样的内存

tracemalloc 模块在程序执行过程中分配了什么样的内存?RAM内存是什么?根据文档:它们被分配了内存块。但它是 RAM 内存吗?

0 投票
0 回答
71 浏览

python-3.x - 了解小列表的 tracemalloc 输出

我正在运行以下简单的脚本来熟悉一下tracemalloc

display_custom只是对 https://docs.python.org/3/library/tracemalloc.html 的display_top轻微修改。我得到以下输出:

第 72 行到底发生了什么?为什么其他更大的列表只使用一个块时使用两个块?为什么内存是5264字节?(对于具有一个块内存的所有条目,只有 8* 个元素)

下面是我用于复制的实际代码的缩短版本。我上面的代码的唯一区别是

  • 我不导入(未使用的)包,
  • 我删除了两个未使用的函数定义(不同版本的漂亮打印函数)和
  • 我删除了一些被注释掉的行。

没有其他任何变化,所以我不希望内存分配发生变化。结果类似于我之前得到的结果(但不完全相同)。

输出是:

0 投票
1 回答
155 浏览

python - 使用 tracemalloc 测量分配的内存

Python 模块tracemalloc提供了对程序分配内存的详细了解。例如,一个用例是记录当前和峰值内存使用情况:

如果我们现在想要重置峰值,文档建议使用tracemalloc.reset_peak(). 但是,这个功能只是在 Python 3.9 中添加的,我想知道我是否可以达到相同的效果tracemalloc.clear_traces()

我的用例是这样的:

所以对于ifor循环中的每一个,我都会做某事并且只想测量我创建的内存。峰值应该只针对每个索引,而不是针对全局运行,这就是我要清除它的原因。

编辑:为了测试和之间的区别reset_peak()clear_traces()我测试了这个程序:

当我测试clear_traces()时,输出是:

当我改为使用reset_peak()时,我获得:

为什么这两种方法在显示的内存量上存在差异?

0 投票
0 回答
20 浏览

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)。

  1. 这是因为 Apache 使用了自己的自定义内存分配器吗?
  2. 如何跟踪此自定义分配器的分配(特别是#allocations,分配的总/平均大小)?
  3. 这个页面在 apr 代码中提到了一个名为 ALLOC_USE_MALLOC 的选项,但是,我在 apr 源代码中找不到这个选项(我检查了 1.7.0、1.4.8、1.4.2 和 httpd2.0.51 版本)