Jeg har ikke haft tid til at se på kilden, men her er nogle kommentarer:
Spørgsmål 1. Med sådan en kraftfuld server, hvorfor ville operativsystemet undlade at levere sådan hukommelse til applikationen (det var den eneste applikation, der kørte)?
Fordi Erlang VM forsøgte at forbruge mere end den ledige hukommelse.
Spørgsmål 2. Erlang Emulator i start er instrueret i at kunne afføde så mange processer, som den måtte have brug for. værdien +P 13421779. Kan Erlang VM ikke få adgang til denne hukommelse eller ikke tildele den til dens processer?
Nej. Hvis du ville være løbet tør for processer, ville Erlang VM have sagt det (og VM'en ville stadig være oppe at køre):
=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}]}
Spørgsmål 3. For Solaris ser den én proces:epmd, der måske indeholder og starter tusindvis af mikrotråde. Hvilke konfigurationer kan jeg lave til Solaris for aldrig at kunne stoppe min applikation, hvor meget "hukommelsessulten" den end måtte være? Swap plads er 16 GB, RAM 20 GB, ærligt talt, der må være noget galt.
epmd
er Erlang port mapping dæmonen. Det er ansvarligt for at administrere distributionet Erlang og har intet at gøre med din individuelle Erlang-applikation. De processer, du skal kigge efter, vil være navnet beam.smp
højst sandsynlig. Disse vil vise OS-hukommelsesforbruget for Erlang VM osv.
Spørgsmål 4. Hvilke konfigurationer kan jeg lave til Erlang Emulator, for at undgå disse heap memory crash dumps, især når al den hukommelse, den måtte have brug for, er tilgængelig på serveren? Hvordan vil jeg køre mere hukommelseskrævende apps på denne server, hvis Erlang stadig ikke formår at allokere sådan hukommelse til en simpel filsystemindeksering (godt det er stærkt samtidig)?
Erlang VM bør kunne bruge al den tilgængelige hukommelse på din maskine. Det afhænger dog af, hvordan din ansøgning er skrevet. Der kan være mange årsager til hukommelseslækager:
- Atomtabellen fyldes op (du opretter for mange unikke atomer)
- ETS- eller Mnesia-tabeller indsamles ikke skrald (du sletter ikke gamle ubrugte elementer)
- Ikke nok hukommelse til processer (du afføder for mange processer)
- Der oprettes for mange binære filer (du kan beholde ubrugte referencer til gamle binære filer)