Jag har inte hunnit titta på källan, men här är några kommentarer:
Fråga 1. Med en så kraftfull server, varför skulle operativsystemet misslyckas med att tillhandahålla sådant minne till applikationen (det var den enda applikationen som kördes)?
Eftersom Erlang VM försökte konsumera mer än det tillgängliga lediga minnet.
Fråga 2. Erlang Emulator i start är instruerad att kunna skapa så många processer som den kan behöva. värdet +P 13421779. Kan Erlang VM inte komma åt detta minne eller misslyckas med att allokera det till dess processer?
Nej. Om du skulle ha fått slut på processer, skulle Erlang VM ha sagt det (och VM:n skulle fortfarande vara igå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}]}
Fråga 3. För Solaris ser den en process:epmd, som kanske innehåller och startar tusentals mikrotrådar. Vilka konfigurationer kan Solaris göra för att aldrig kunna stoppa min applikation hur mycket "minnessugen" den än är? Det tillgängliga utbytesutrymmet är 16 GB, RAM 20 GB, ärligt talat, det måste vara något fel.
epmd
är Erlang port kartläggning deamon. Det är ansvarigt för att hantera distributionen Erlang och har inget med din individuella Erlang-applikation. Processerna du bör leta efter kommer att heta beam.smp
mest troligt. Dessa kommer att visa OS-minnesförbrukningen för Erlang VM etc.
Fråga 4. Vilka konfigurationer kan jag göra till Erlang Emulator, för att undvika dessa högminneskraschdumpar, särskilt när allt minne som det kan behöva finns tillgängligt på servern? Hur ska jag köra mer minneskrävande appar på den här servern om Erlang fortfarande misslyckas med att allokera sådant minne till en enkel filsystemsindexerare (det är väl mycket samtidigt)?
Erlang VM bör kunna använda allt tillgängligt minne i din maskin. Det beror dock på hur din ansökan är skriven. Det kan finnas många orsaker till minnesläckor:
- Atomtabellen fylls upp (du skapar för många unika atomer)
- ETS- eller Mnesia-tabeller samlas inte in (du tar inte bort gamla oanvända element)
- Inte tillräckligt med minne för processer (du skapar för många processer)
- För många binärer skapas (du kan behålla oanvända referenser till gamla binärer)