如何解释deterministic profiler of sbcl的输出?
seconds | gc | consed | calls | sec/call | name
-------------------------------------------------------
seconds
(总执行时间),calls
(总呼叫金额),sec/call
(每次通话的平均时间)和name
(以及功能名称) )很直接。 consed
和gc
的含义是什么?
我猜consed
告诉已分配的内存(虽然在哪个单元?)并且我会说gc
告诉gc回收的单位数量,但这两个值永远不会匹配甚至使用一个不同的表示方案(gc
每3个数字有一个.
,并且,
一个。{/ p>
E.g。这个示例输出会告诉我什么(如果我猜对了,我会有大量的内存泄漏):
seconds | gc | consed | calls | sec/call | name
-------------------------------------------------------
0.011 | 0.000 | 965,488 | 6 | 0.001817 | PACKAGE:NAME
-------------------------------------------------------
0.011 | 0.000 | 965,488 | 6 | | Total
答案 0 :(得分:1)
如果您熟悉SBCL(缩写)下(free …)
的输出,则列更易于理解:
Evaluation took:
0.771 seconds of real time
[ Run times consist of 0.061 seconds GC time, and 0.639 seconds non-GC time. ]
166,575,680 bytes consed
在您的示例中,package:name
位于调用堆栈的顶部(仅在已分析的函数中),持续0.011秒,并且GC不会影响它,因为它在此期间从未发生过或过快,并且965488字节分配了SBCL管理的内存。
每个GC后使用和未使用的内存量无法按功能细分,因为不会跟踪此信息。您可以通过评估(sb-ext:gc :full t) (room)
之前和之后来衡量总体内存消耗,但请注意报告的数量略有波动,并且不包括外部代码分配的内存(C库,如果您的应用程序使用它们),以及最后一个REPL的三个结果和表达式为retained。