나는이 질문을 할 수있는 곳이 많다는 것을 알고 있지만 여기에서 시도 할 것이라고 생각했습니다. 나는 이미 Maxima의 선량한 사람들에게서 가능한 한 많은 도움을 얻었습니다.SBCL 오류 : Linux 컴퓨터에서 Maxima를 실행할 때 "binding stack exhausted"
Maxima를 SBCL로 실행하고 지속적으로 오류가 발생합니다.
INFO: Binding stack guard page unprotected
Binding stack guard page temporarily disabled: proceed with caution
Maxima encountered a Lisp error:
Binding stack exhausted.
PROCEED WITH CAUTION.
Automatically continuing.
To enable the Lisp debugger set *debugger-hook* to nil.
INFO: Binding stack guard page reprotected
는 I는 동적 공간 크기 및 제어 스택 크기 대해 더 큰 값을 가산함으로써 맥시마 (그것의 실행)에 대한 호출을 수정 한, 난 ./.../sbcl 살펴본 -maxx 실행 파일에 $ MAXIMA_LISP_OPTIONS에 추가 할 인수에 대한 아이디어는을 참조하십시오.
또한 일반적으로 실행하기 전에이 작업을 수행합니다 (OS가 똑똑하기 때문에 불필요하다고 생각 하긴하지만, 마지막 작업은 꼭 필요합니다).
sudo fstrim -v/
echo 3 | sudo tee /proc/sys/vm/drop_caches
echo 262144 | sudo tee /proc/sys/vm/max_map_count
내 맥시마 작업을하는 동안 몇 가지 계산 후
, 나는이 오류를 피할 수있는 희망:lisp (sb-ext:gc :full t)
의 몇 던져. 나는 lisp을 잘 모르고 확실히 가비지 콜렉션에 관한 모든 것을 이해하지 못한다.
맥시마 작업에서 메모를 사용하고 있지만 계산이 다소 집중적이고 재귀 적입니다. 내 컴퓨터, inxi 등 -b에 의해
System: Host: XXX-MacBookPro Kernel: 4.10.0-33-generic x86_64 (64 bit) Desktop: Cinnamon 3.4.6
Distro: Linux Mint 18.2 Sonya
Machine: System: Apple (portable) product: MacBookPro11 3 v: 1.0
Mobo: Apple model: Mac-2BD1B313 v: MacBookPro11 3
Bios: Apple v: MBP112.88Z.0138.B25.1702171721 date: 02/17/2017
CPU: Quad core Intel Core i7-4980HQ (-HT-MCP-) speed/max: 1402/4000 MHz
Graphics: Card: NVIDIA GK107M [GeForce GT 750M Mac Edition]
Display Server: X.Org 1.18.4 drivers: nvidia (unloaded: fbdev,vesa,nouveau)
Resolution: [email protected]
GLX Renderer: GeForce GT 750M/PCIe/SSE2 GLX Version: 4.5.0 NVIDIA 375.66
Network: Card-1: Broadcom BCM4360 802.11ac Wireless Network Adapter driver: wl
Card-2: Broadcom NetXtreme BCM57762 Gigabit Ethernet PCIe driver: tg3
Drives: HDD Total Size: 1000.6GB (17.5% used)
Info: Processes: 291 Uptime: 43 min Memory: 3366.6/15953.7MB Client: Shell (bash) inxi: 2.2.35
을 설명 내 맥시마와 SBCL은 GIT에서 구축하고 ~ 약 2 주, 머리에서 아주 새로운 및 모든 메이크업 테스트를 통과했다. 또한 내 스왑은 다음과 같습니다.
[email protected] ~/ResearchWC $ cat /proc/swaps
Filename Type Size Used Priority
/70GiB.swap file 73400316 0 -2
/dev/sda7 partition 25564776 0 -1
그리고 나는 종종 메모리가 부족하고 20-30G 정도가 스왑입니다. (나는 htop 특정 활동을 보여주는 중단 통보로, 이후 100 시간 말하는 팬은 오르지 않고 아래)
는 일반적으로 결국 걸어 것 같다 내가 고갈 오류가 가끔 포함 된 순환에 묻혀 있다고 생각 전화. 내가 원하는 재귀 레벨에서 함수를 호출하는 것을 피하고 대신 터미널에서 "손으로"그들을 빌드 했으므로 위의 오류 메시지가 나타납니다. E.G.는 fib (10)과 같은 함수를 호출하는 대신 fib (1), fib (2), fib (3)을 연속적으로 호출하여 각 이전 값을 메모했습니다.시간이 있지만 내 스왑을 극대화하는 방법을 모르는 것 같습니다. htop 나는 ~ 25 % 이상 사용하는 것을 본 적이 없습니다.
1.) 누구든지 내가이 오류를 피하기 위해 SBCL로 무엇을 할 수 있는지 알고 있습니까?
2.) 이러한 상황에서 다른 isp을 실행하는 것이 더 좋을까요? ecl, cml 등?
미리 조언 해 주셔서 감사 드리며 필요한 경우 자세한 내용을 제공해 드리겠습니다.
UPDATE
동적 공간 크기, 스택 크기 및 바인딩 스택 크기 흐름이 완만 후, 나는 최대 힙 제한 대신 바인딩 스택은 추락이 시간에 대한이었다. 첨부 된 백 트레이스 출력 (두 개의 레지스터 pc와 fp가 ... - 프로그램 카운터와 프레임 포인터가 무엇인지 확실하지 않음). 나는
ldb> backtrace
Backtrace:
0: SB-BIGNUM::MULTIPLY-BIGNUM-AND-FIXNUM, pc = 0x21cb1336, fp = 0x7ffff3943f18
1: SB-KERNEL::TWO-ARG-*, pc = 0x21cb00a7, fp = 0x7ffff3943f98
2: MAXIMA::CTIMES, pc = 0x21e076b4, fp = 0x7ffff3943fc0
3: MAXIMA::PCTIMES, pc = 0x21de5f4c, fp = 0x7ffff3943ff0
4: MAXIMA::PCTIMES1, pc = 0x21e78f1e, fp = 0x7ffff3944048
5: MAXIMA::PCTIMES, pc = 0x21de6033, fp = 0x7ffff3944078
6: MAXIMA::PCETIMES1, pc = 0x21fe0560, fp = 0x7ffff39440d8
7: MAXIMA::PTIMES1, pc = 0x21f457e5, fp = 0x7ffff3944148
8: MAXIMA::PTIMES, pc = 0x21db6561, fp = 0x7ffff3944180
9: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff39441b8
10: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff39441f0
11: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944228
12: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944260
13: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944298
14: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff39442d0
15: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944308
16: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944340
17: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944378
18: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff39443b0
19: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff39443e8
20: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944420
21: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944458
22: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944490
23: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff39444c8
24: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944500
25: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944538
26: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944570
27: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff39445a8
28: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff39445e0
29: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944618
30: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944650
31: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944688
32: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff39446c0
33: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff39446f8
34: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944730
35: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944768
36: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff39447a0
37: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff39447d8
38: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944810
39: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944848
40: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944880
41: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff39448b8
42: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff39448f0
43: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944928
44: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944960
45: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944998
46: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff39449d0
47: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944a08
48: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944a40
49: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944a78
50: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944ab0
51: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944ae8
52: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944b20
53: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944b58
54: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944b90
55: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944bc8
56: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944c00
57: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944c38
58: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944c70
59: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944ca8
60: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944ce0
61: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944d18
62: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944d50
63: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944d88
64: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944dc0
65: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944df8
66: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944e30
67: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944e68
68: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944ea0
69: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944ed8
70: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944f10
71: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944f48
72: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944f80
73: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3944fb8
74: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3944ff0
75: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3945028
76: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3945060
77: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3945098
78: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff39450d0
79: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3945108
80: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3945140
81: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3945178
82: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff39451b0
83: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff39451e8
84: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3945220
85: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3945258
86: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3945290
87: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff39452c8
88: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3945300
89: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3945338
90: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3945370
91: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff39453a8
92: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff39453e0
93: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3945418
94: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3945450
95: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff3945488
96: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff39454c0
97: MAXIMA::PSIMP, pc = 0x21dd0617, fp = 0x7ffff39454f8
98: MAXIMA::PALGSIMP, pc = 0x22166db7, fp = 0x7ffff3945530
스택과 힙은 서로 다른 두 가지입니다. 'Binding stack exhausted'는 대개 높은 재귀 깊이를 나타냅니다. 큰 힙/스왑은 메모리 유출 또는 모든 메모리를 확보 할 수없는 GC로 인해 발생합니다. 가장 좋은 곳은 SBCL 메일 링리스트입니다. 대안 구현은 Clozure CL입니다. –
@RainerJoswig Common Lisp에서 최대 호출 스택 깊이를 결정하는 방법이 있습니까? 그렇지 않다면 SBCL을 위해 구체적으로? 최대 스택 깊이를 알려주는 상수가 있지만 웹 검색은 그러한 것을 찾지 못하는 것임을 상기하는 것 같습니다. 아마도 그것은 내 생각에 약간의 희망적인 생각 일 것입니다. –
"최대 호출 스택 깊이"에 대한 언급이있는 유일한 곳은 http://sbcl.org/manual/index.html에서 15.2.4 절 및 15.2.5 절의 프로파일 링 및 바인딩 및 바인딩 해제에 대한 설명에 나와 있습니다. 섹션 8.2의 내부 매뉴얼 (http://sbcl.org/sbcl-internals/Binding-and-unbinding.html#Binding-and-unbinding). 빠른 두 질문 (어쩌면 @RobertDodier가 @RainerJoswig에게 물어 본 것)은 수정 가능한 변수에 의해 제어되는 바인딩 스택 깊이이며 "스택 크기 제어"가 이에 영향을 미칩니 까? validate.h에서 BINDING_STACK_SIZE를 1024 * 1024로 설정하는 #define을 보았습니다 ... 늘릴 수 있습니까? – nate