我意識到有很多地方我可以問這個問題,但我想我會在這裏嘗試。我已經看到儘可能多地從Maxima的好人那裏獲得幫助。SBCL錯誤:在Linux機器上運行Maxima時出現「binding stack exhausted」
我用SBCL運行Maxima並始終得到錯誤;
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
我已經通過用於動態空間大小和控制堆棧大小添加較大的值修改調用最大值(其可執行文件),並且我已經看過./.../sbcl -help以獲取最大可執行文件中的任何想法參數以添加到$ MAXIMA_LISP_OPTIONS。另外,我通常在我運行它之前就做這些事情(儘管我認爲它們是不必要的,因爲操作系統很聰明,也許最後一個需要弄清楚);但是,我並不認爲這些操作是不必要的。
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)
。我不知道這個說得好,當然也不明白垃圾收集的全部內容。
我的計算有點密集和遞歸,雖然我在Maxima工作中使用memoization。我的電腦是由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左右進入交換。
通常它似乎掛起最終(說100小時後,我注意到HTOP不再顯示某些活動,風扇不上去,下),我覺得耗盡錯誤有時會埋在嵌入式遞歸調用。我在上面得到了這個錯誤信息,因爲我避免了在我想要的遞歸級別調用函數,而是在終端「手工」地構建它們。 E.G.不是隻調用類似fib(10)的東西,而是先調用fib(1),fib(2),fib(3),其中每個以前的值都被記憶。
我有時間,但似乎不知道如何最大限度地發揮我的交換 - 看htop我從來沒有見過它使用比說約25%。
1.)有誰知道我可以用SBCL做些什麼來避免這些錯誤? 2)在這些情況下,另一個lisp會是更好的運行方式嗎? 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
棧和堆是兩回事。 '綁定堆棧耗盡'通常會指向高遞歸深度。內存泄漏或不能釋放所有內存的GC會導致大量堆/交換。最好的地方是SBCL郵件列表。另一種實現方式是Clozure CL。 –
@RainerJoswig有沒有一種方法可以確定Common Lisp中的最大調用堆棧深度?或者如果沒有,那麼專門爲SBCL?我似乎記得,有一個常數可以告訴最大堆棧深度,但網絡搜索似乎沒有發現任何這樣的事情。也許這是我的一廂情願。 –
我提到「最大調用堆棧深度」的唯一地方是在剖析中使用,部分15.2.4和15.2.5在http://sbcl.org/manual/index.html以及對綁定和解除綁定的描述在http://sbcl.org/sbcl-internals/Binding-and-unbinding.html#Binding-and-unbinding的內部手冊中第8.2節。快速兩個問題(也許你@RobertDodier問@RainerJoswig)是由一些可修改的變量控制的綁定堆棧深度,並且「控制堆棧大小」對此有任何影響?我確實在validate.h中看到#define,將BINDING_STACK_SIZE設置爲1024 * 1024 ...我可以增加它嗎? – nate