Ich hatte keine Zeit, mir die Quelle anzusehen, aber hier sind einige Kommentare:
Frage 1. Warum sollte das Betriebssystem bei einem so leistungsstarken Server der Anwendung (es war die einzige laufende Anwendung) keinen solchen Speicher zur Verfügung stellen?
Weil die Erlang-VM versucht hat, mehr als den verfügbaren freien Speicher zu verbrauchen.
Frage 2. Der von mir gestartete Erlang-Emulator ist angewiesen, so viele Prozesse zu starten, wie er benötigt. der Wert +P 13421779. IstErlang, dass die VM nicht auf diesen Speicher zugreifen kann oder ihn nicht seinen Prozessen zuweisen kann?
Nein. Wenn Ihnen die Prozesse ausgegangen wären, hätte die Erlang-VM dies gesagt (und die VM wäre immer noch aktiv):
=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}]}
Frage 3. Für Solaris sieht es einen Prozess:epmd, der möglicherweise Tausende von Mikro-Threads enthält und startet. Welche Konfigurationen kann Solaris vornehmen, um meine Anwendung niemals stoppen zu können, so "speicherhungrig" sie auch sein mag? Der verfügbare Auslagerungsspeicher beträgt 16 GB, RAM 20 GB, ehrlich gesagt, da muss etwas nicht stimmen.
epmd
ist der Erlang-Port-Mapping-Dämon. Es ist für die Verwaltung von verteiltem Erlang verantwortlich und hat nichts mit Ihrer individuellen Erlang-Anwendung zu tun. Die Prozesse, nach denen Sie suchen sollten, haben den Namen beam.smp
höchstwahrscheinlich. Diese zeigen den OS-Speicherverbrauch der Erlang-VM usw.
Frage 4. Welche Konfigurationen kann ich am Erlang-Emulator vornehmen, um diese Heap-Memory-Crash-Dumps zu vermeiden, insbesondere wenn der gesamte benötigte Speicher auf dem Server verfügbar ist? Wie soll ich mehr Speicher verbrauchende Apps auf diesem Server ausführen, wenn Erlang immer noch keinen solchen Speicher einem einfachen Dateisystem-Indexer zuweist (na ja, er ist stark gleichzeitig)?
Die Erlang-VM sollte in der Lage sein, den gesamten verfügbaren Speicher auf Ihrem Computer zu verwenden. Es hängt jedoch davon ab, wie Ihre Bewerbung geschrieben ist. Es kann viele Gründe für Speicherlecks geben:
- Atomtabelle füllt sich (Sie erstellen zu viele einzigartige Atome)
- ETS- oder Mnesia-Tabellen werden nicht von der Garbage Collection erfasst (Sie löschen keine alten unbenutzten Elemente)
- Nicht genug Speicher für Prozesse (Sie erzeugen zu viele Prozesse)
- Es werden zu viele Binärdateien erstellt (Sie behalten möglicherweise ungenutzte Verweise auf alte Binärdateien)