gpt4 book ai didi

lisp - scbl 异常堆在垃圾收集期间耗尽

转载 作者:太空宇宙 更新时间:2023-11-03 18:38:39 28 4
gpt4 key购买 nike

当我们的应用程序运行一段时间,例如,运行几个小时,sbcl 将抛出堆耗尽异常。

Heap exhausted during garbage collection: 1968 bytes available, 2128 requested.
Gen StaPg UbSta LaSta LUbSt Boxed Unboxed LB LUB !move Alloc Waste Trig WP GCs Mem-age
0: 0 0 0 0 0 0 0 0 0 0 0 5368709 0 0 0.0000
1: 0 0 0 0 0 0 0 0 0 0 0 5368709 0 0 0.0000
2: 0 0 0 0 0 0 0 0 0 0 0 5368709 0 0 0.0000
3: 101912 101913 0 0 19362 20536 0 0 0 162867456 554752 102714709 0 1 1.4405
4: 130984 131071 0 0 29240 18868 0 0 25 191196152 5854216 128537781 14785 1 0.6442
5: 75511 81013 0 0 16567 17127 92 99 36 132974568 5818392 2000000 16565 0 0.0000
6: 0 0 0 0 7949 1232 0 0 0 37605376 0 2000000 7766 0 0.0000
Total bytes allocated = 524643552
Dynamic-space-size bytes = 536870912
GC control variables:
*GC-INHIBIT* = true
*GC-PENDING* = true
*STOP-FOR-GC-PENDING* = false
fatal error encountered in SBCL pid 3281(tid 3067845440):
Heap exhausted, game over.

Welcome to LDB, a low-level debugger for the Lisp runtime environment.
ldb>

有什么建议吗?

最佳答案

SBCL 不允许您在堆上分配超过 (sb-ext:dynamic-space-size) 字节。这里有一个 512MB 的默认大小(536870912 字节),Lisp 程序在尝试进行另一次分配时已经使用了几乎这个数量。

通过使用 --dynamic-space-size 1024 启动 SBCL,您可以将可用的堆空间量增加一倍,达到 1024MB。但是,正如一些评论指出的那样,可能存在内存泄漏,其中对象的引用与系统已经运行的时间,因此这只会提供暂时的喘息机会。

(room t) 标准 Common Lisp 函数调用可能有助于调试它,如果您定期调用它的话。

像这样的更高级代码 http://dwim.hu/darcsweb/darcsweb.cgi?r=HEAD%20hu.dwim.debug;a=headblob;f=/source/path-to-root.lisp#l42深入研究 SB-VM 内部分配图可以揭示更多信息,SBCL 有一个统计分析器,http://www.sbcl.org/manual/#Statistical-Profiler也支持报告分配。

关于lisp - scbl 异常堆在垃圾收集期间耗尽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31821799/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com