Tôi không có thời gian để xem nguồn, nhưng đây là một số nhận xét:
Câu hỏi 1. Với một máy chủ mạnh như vậy, tại sao hệ điều hành lại không cung cấp bộ nhớ như vậy cho ứng dụng (đó là ứng dụng duy nhất đang chạy)?
Vì máy ảo Erlang đã cố gắng tiêu thụ nhiều hơn bộ nhớ trống có sẵn.
Câu hỏi 2. Trình giả lập Erlang mà tôi bắt đầu được hướng dẫn để có thể phân tích nhiều quy trình mà nó có thể cần. giá trị + P 13421779. Máy ảo Erlang không truy cập được bộ nhớ này hoặc không thể cấp phát cho nó các quy trình?
Không. Nếu bạn dùng hết bộ xử lý, máy ảo Erlang sẽ nói như vậy (và máy ảo vẫn hoạt động):
=ERROR REPORT==== 18-Aug-2011::10:04:04 ===
Error in process <0.31775.138> with exit value: {system_limit,[{erlang,spawn_link, [erlang,apply,[#Fun<shell.3.130303173>,[]]]},{erlang,spawn_link,1},{shell,get_command,5}, {shell,server_loop,7}]}
Câu hỏi 3. Đối với Solaris, nó nhìn thấy một quá trình:epmd, có lẽ chứa và bắt đầu hàng nghìn tiểu đề. Những cấu hình nào có thể áp dụng cho Solaris để có thể không bao giờ dừng ứng dụng của tôi dù nó có thể "đói bộ nhớ" đến mức nào? Không gian hoán đổi khả dụng là 16 GB, RAM 20 GB, thành thật mà nói, chắc chắn có điều gì đó không ổn.
epmd
là deamon ánh xạ cổng Erlang. Nó chịu trách nhiệm quản lý Erlang phân phối và không liên quan gì đến ứng dụng Erlang cá nhân của bạn. Các quy trình bạn nên tìm sẽ là tên beam.smp
rất có thể. Chúng sẽ hiển thị mức tiêu thụ bộ nhớ hệ điều hành của Erlang VM, v.v.
Câu hỏi 4. Tôi có thể thực hiện những cấu hình nào cho Trình mô phỏng Erlang, để tránh những lỗi đổ vỡ bộ nhớ heap này, đặc biệt là khi tất cả bộ nhớ nó cần đều có sẵn trên máy chủ? Làm cách nào để chạy nhiều ứng dụng tiêu tốn bộ nhớ hơn trên máy chủ này nếu Erlang vẫn không phân bổ được bộ nhớ đó cho một trình chỉ mục hệ thống tệp đơn giản (đồng thời rất nhiều)?
Máy ảo Erlang sẽ có thể sử dụng tất cả bộ nhớ có sẵn trong máy của bạn. Tuy nhiên, nó phụ thuộc vào cách ứng dụng của bạn được viết. Có thể có nhiều lý do dẫn đến rò rỉ bộ nhớ:
- Bảng nguyên tử đang lấp đầy (bạn tạo quá nhiều nguyên tử duy nhất)
- Bảng ETS hoặc Mnesia không được thu thập rác (bạn không xóa các phần tử cũ không sử dụng)
- Không đủ bộ nhớ cho các quy trình (bạn tạo ra quá nhiều quy trình)
- Quá nhiều tệp nhị phân được tạo (bạn có thể giữ các tham chiếu không sử dụng đến các tệp nhị phân cũ)