Нямах време да разгледам източника, но ето някои коментари:
Въпрос 1. При такъв мощен сървър защо операционната система не би могла да предостави такава памет на приложението (това беше единственото работещо приложение)?
Тъй като Erlang VM се опита да консумира повече от наличната свободна памет.
Въпрос 2. Емулаторът на Erlang, който стартирам, е инструктиран да може да създава толкова процеси, колкото може да са му необходими. стойността +P 13421779. Erlang VM не успява да получи достъп до тази памет или не успява да я разпредели към своите процеси?
Не. Ако процесите са ви свършили, Erlang VM щеше да каже това (и VM щеше да продължи да работи):
=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}]}
Въпрос 3. За Solaris той вижда един процес:epmd, който може би съдържа и стартира хиляди микронишки. Какви конфигурации могат да създадат на Solaris, за да може никога да не спира приложението ми, колкото и „гладно за памет“ да е то? Наличното пространство за размяна е 16 GB, RAM 20 GB, честно казано, трябва да има нещо нередно.
epmd
е демонът за картографиране на портове Erlang. Той отговаря за управлението на дистрибутирания Erlang и няма нищо общо с вашето индивидуално приложение Erlang. Процесите, които трябва да търсите, ще бъдат с име beam.smp
най-вероятно. Те ще покажат консумацията на ОС памет на Erlang VM и др.
Въпрос 4. Какви конфигурации мога да направя на емулатора на Erlang, за да избегна тези срива на паметта на купчина, особено когато цялата памет, която може да се нуждае, е налична на сървъра? Как ще стартирам повече приложения, които консумират памет на този сървър, ако Erlang все още не успее да разпредели такава памет към обикновен индексатор на файлова система (добре е, че е силно едновременен)?
Erlang VM трябва да може да използва цялата налична памет във вашата машина. Все пак зависи от начина, по който е написано вашето заявление. Може да има много причини за изтичане на памет:
- Таблица с атоми се запълва (създавате твърде много уникални атоми)
- Таблиците ETS или Mnesia не се събират боклук (не изтривате стари неизползвани елементи)
- Няма достатъчно памет за процеси (пораждате твърде много процеси)
- Създадени са твърде много двоични файлове (може да запазите неизползвани препратки към стари двоични файлове)