Tôi nhận ra có nhiều nơi tôi có thể đặt câu hỏi này nhưng tôi nghĩ tôi sẽ thử ở đây. Tôi dường như đã đạt được nhiều sự giúp đỡ từ những người tốt ở Maxima.Lỗi SBCL: "liên kết chồng cạn kiệt" khi chạy Maxima trên máy Linux
Tôi chạy Maxima với SBCL và luôn gặp lỗi;
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
Tôi đã sửa đổi các cuộc gọi đến Maxima (thực thi của nó) bằng cách thêm giá trị lớn hơn cho các kích thước không gian năng động và kiểm soát ngăn xếp kích thước, và tôi đã xem xét ./.../sbcl -help để biết bất kỳ ý tưởng nào về các đối số để thêm vào $ MAXIMA_LISP_OPTIONS trong tệp thực thi tối đa.
Ngoài ra, tôi thường làm điều này ngay trước khi tôi chạy nó (mặc dù tôi tưởng tượng chúng là không cần thiết vì hệ điều hành thông minh, cũng có thể là điều cuối cùng cần phải được fiddled với);
sudo fstrim -v/
echo 3 | sudo tee /proc/sys/vm/drop_caches
echo 262144 | sudo tee /proc/sys/vm/max_map_count
và sau một vài phép tính trong khi làm việc Maxima của tôi, tôi ném vào một vài
:lisp (sb-ext:gc :full t)
với hy vọng tránh được lỗi này. Tôi không biết lisp rằng tốt và chắc chắn không hiểu tất cả có về thu gom rác thải.
Tính toán của tôi hơi tốn kém và đệ quy, mặc dù tôi đang sử dụng ghi nhớ trong tác phẩm Maxima. Máy tính của tôi được mô tả bởi inxi -b như,
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
và Maxima và SBCL của tôi được xây dựng từ GIT và khá mới ~ khoảng 2 tuần, và từ đầu và đã vượt qua tất cả các bài kiểm tra làm của họ. Ngoài ra trao đổi của tôi trông giống như;
[email protected] ~/ResearchWC $ cat /proc/swaps
Filename Type Size Used Priority
/70GiB.swap file 73400316 0 -2
/dev/sda7 partition 25564776 0 -1
và tôi thường về cơ bản hết bộ nhớ và khoảng 20-30G để hoán đổi.
Thông thường nó dường như treo cuối cùng (sau khi nói 100 giờ, khi tôi thông báo htop ngừng hiển thị hoạt động nhất định và quạt không tăng lên) và tôi nghĩ rằng các lỗi cạn kiệt đôi khi được chôn trong đệ quy nhúng cuộc gọi. Tôi nhận được thông báo lỗi này ở trên vì tôi tránh gọi hàm ở cấp độ đệ quy mà tôi muốn và thay vào đó, hãy tạo chúng bằng tay tại thiết bị đầu cuối. E.G., thay vì chỉ gọi một cái gì đó như fib (10), tôi thay vì gọi là fib liên tục (1), fib (2), fib (3), trong đó mỗi giá trị trước đó đã được ghi nhớ.
Tôi có thời gian nhưng dường như không biết cách tối đa hóa trao đổi - xem htop Tôi chưa bao giờ thấy nó sử dụng nhiều hơn nói ~ 25%.
1.) Có ai biết tôi có thể làm gì khác với SBCL để tránh những lỗi này không?
2.) Một trình duyệt khác có tốt hơn để chạy trong các tình huống này hay không, ví dụ: ecl, cml, v.v ...?
Cảm ơn trước vì lời khuyên nào và tôi có thể cung cấp thêm chi tiết nếu cần.
CẬP NHẬT
Sau khi nâng tỉ số kích thước động không gian, kích thước ngăn xếp, và các ràng buộc ngăn xếp kích thước, tôi đã lên chống lại giới hạn đống thay cho chồng ràng buộc thời gian này khi nó bị rơi. Kèm theo là đầu ra của backtrace (Không chắc chắn những gì hai đăng ký pc và fp là ... - chương trình truy cập và con trỏ khung?). Tôi chạy này với dấu vết (cặn, taylor) cũng nhưng không bao giờ nhìn thấy bất cứ điều gì tanh ...
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
Ngăn xếp và đống là hai thứ khác nhau. 'Binding stack exhausted' thường sẽ trỏ đến độ sâu đệ quy cao. Một đống/trao đổi lớn sẽ là do rò rỉ bộ nhớ hoặc GC không thể giải phóng tất cả bộ nhớ. Nơi tốt nhất để hỏi là danh sách gửi thư của SBCL. Một thực hiện thay thế sẽ là Clozure CL. –
@RainerJoswig Có cách nào để xác định độ sâu ngăn xếp cuộc gọi tối đa trong Common Lisp không? hoặc nếu không thì cụ thể cho SBCL? Tôi dường như nhớ lại rằng có một hằng số cho biết chiều sâu ngăn xếp tối đa nhưng tìm kiếm trên web dường như không tìm thấy bất kỳ thứ gì như vậy. Có lẽ đó là một chút suy nghĩ mơ hồ về phía tôi. –
Nơi duy nhất tôi thấy đề cập đến "độ sâu ngăn xếp cuộc gọi tối đa" là sử dụng trong lược tả, mục 15.2.4 & 15.2.5 tại http://sbcl.org/manual/index.html và mô tả về ràng buộc & bẻ khóa trong hướng dẫn nội bộ trong phần 8.2 tại http://sbcl.org/sbcl-internals/Binding-and-unbinding.html#Binding-and-unbinding. Nhanh hai câu hỏi (có thể những gì bạn @RobertDodier hỏi @RainerJoswig) là độ sâu ngăn xếp ràng buộc được kiểm soát bởi một số biến có thể sửa đổi và "kiểm soát kích thước ngăn xếp" có ảnh hưởng đến điều này không? Tôi đã thấy cài đặt #define trong validate.h BINDING_STACK_SIZE đến 1024 * 1024 ... Tôi có thể tăng không? – nate