Gdy nasza aplikacja działa przez pewien czas, na przykład, działa przez wiele godzin, sbcl rzuci wyjątek wyczerpania stosu.wyjątek scbl Sterty wyczerpane podczas zbierania śmieci
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>
Jakieś sugestie?
Sugestia: nie wyczerpuj sterty. Wygląda na to, że masz wyciek pamięci, ja. mi. trzymają się rzeczy, aby nie można ich było zbierać. – Svante
Od czasu do czasu wpadałem na ten sam problem i nie było to deterministyczne, dlatego nie mogłem (jeszcze) złożyć zgłoszenia błędu lub znaleźć błędu z mojej strony. Ale wspólny wzorzec, jaki napotkałem, polegał na tym, że przeznaczyłem dużo pamięci na krótkotrwałe użytkowanie. Ponieważ SBCL używa [generation garbage collection] {http://www.sbcl.org/manual/#History-and-Implementation-of-SBCL} może to być spowodowane złym usuwaniem wyższych pokoleń. W ten sposób możesz wymusić krótkie operacje z użyciem wysokiej mem do oddzielnych wątków, ponieważ rozwiązało to problem, ponieważ po tym, jak wątek umrze, pamięć zostanie zwolniona. – Sim
innym rozwiązaniem może być 'sbcl --dynamic-space-size' –
Sim