Neměl jsem čas se podívat na zdroj, ale tady jsou některé komentáře:
Otázka 1. Proč by operační systém u tak výkonného serveru neposkytoval aplikaci takovou paměť (byla to jediná spuštěná aplikace)?
Protože se Erlang VM pokusil spotřebovat více než dostupnou volnou paměť.
Otázka 2. Emulátor Erlang i start je instruován, aby byl schopen spustit tolik procesů, kolik potřebuje. hodnotu +P 13421779. Nedaří se virtuálnímu počítači Erlang získat přístup k této paměti nebo ji nepřidělí svým procesům?
Ne. Pokud by vám došly procesy, řekl by to virtuální počítač Erlang (a virtuální počítač by stále fungoval):
=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}]}
Otázka 3. Solaris vidí jeden proces:epmd, který možná obsahuje a spouští tisíce mikrovláken. Jaké konfigurace lze vytvořit pro Solaris, aby bylo možné nikdy nezastavit moji aplikaci, ať je jakkoli „hladová po paměti“? Dostupný odkládací prostor je 16 GB, RAM 20 GB, upřímně, musí být něco špatně.
epmd
je démon mapující port Erlang. Je zodpovědný za správu distributet Erlang a nemá nic společného s vaší individuální aplikací Erlang. Procesy, které byste měli hledat, se budou jmenovat beam.smp
pravděpodobně. Tyto zobrazí spotřebu paměti OS Erlang VM atd.
Otázka 4. Jaké konfigurace mohu provést v emulátoru Erlang, abych se vyhnul těmto výpadkům paměti haldy, zvláště když je na serveru dostupná veškerá paměť, kterou může potřebovat? Jak mohu na tomto serveru spouštět aplikace náročnější na paměť, pokud Erlang stále nedokáže alokovat takovou paměť jednoduchému indexátoru souborového systému (je to silně souběžné)?
Erlang VM by měl být schopen využít veškerou dostupnou paměť ve vašem počítači. Záleží však na tom, jak je vaše aplikace napsaná. Důvodů úniku paměti může být mnoho:
- Tabulka atomů se plní (vytváříte příliš mnoho jedinečných atomů)
- Tabulky ETS nebo Mnesia nejsou shromažďovány jako odpad (neodstraňujete staré nepoužívané prvky)
- Nedostatek paměti pro procesy (vytvořili jste příliš mnoho procesů)
- Je vytvořeno příliš mnoho binárních souborů (můžete si ponechat nepoužité odkazy na staré binární soubory)