sql >> Database >  >> RDS >> Oracle

Erlang en het gebruik van Heap Memory

Ik heb geen tijd gehad om naar de bron te kijken, maar hier zijn enkele opmerkingen:

Vraag 1. Waarom zou het besturingssysteem met zo'n krachtige server zo'n geheugen niet aan de applicatie leveren (het was de enige applicatie die actief was)?

Omdat de Erlang VM meer dan het beschikbare vrije geheugen probeerde te verbruiken.

Vraag 2. De Erlang Emulator i start is geïnstrueerd om zoveel processen te kunnen starten als nodig is. de waarde +P 13421779. Heeft Erlang VM geen toegang tot dit geheugen of kan het niet worden toegewezen aan zijn processen?

Nee. Als je geen processen meer zou hebben, zou de Erlang VM dat hebben gezegd (en de VM zou nog steeds actief zijn):

=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}]}

Vraag 3. Voor Solaris ziet het één proces:epmd, misschien duizenden microthreads bevatten en starten. Welke configuraties kan ik naar Solaris maken om mijn applicatie nooit te kunnen stoppen, hoe "geheugenhongerig" het ook is? De beschikbare swapruimte is 16 GB, RAM 20 GB, eerlijk gezegd moet er iets mis zijn.

epmd is de Erlang port mapping deamon. Het is verantwoordelijk voor het beheer van Distributeur Erlang en heeft niets te maken met uw individuele Erlang-toepassing. De processen waarnaar u moet zoeken, hebben de naam beam.smp waarschijnlijk. Deze tonen het OS-geheugenverbruik van de Erlang VM enz.

Vraag 4. Welke configuraties kan ik maken aan de Erlang Emulator om deze heap geheugencrash dumps te vermijden, vooral wanneer al het geheugen dat het nodig heeft beschikbaar is op de server? Hoe kan ik meer geheugenverslindende apps op deze server draaien als Erlang er nog steeds niet in slaagt om dergelijk geheugen toe te wijzen aan een eenvoudige bestandssysteemindexeerder (nou ja, het is zwaar gelijktijdig)?

De Erlang-VM zou al het beschikbare geheugen in uw machine moeten kunnen gebruiken. Het hangt echter af van hoe uw aanvraag is geschreven. Er kunnen veel redenen zijn voor geheugenlekken:

  • Atoomtabel loopt vol (u maakt te veel unieke atomen)
  • ETS- of Mnesia-tabellen worden niet verzameld (je verwijdert geen oude ongebruikte elementen)
  • Onvoldoende geheugen voor processen (je brengt te veel processen voort)
  • Er zijn te veel binaire bestanden gemaakt (u kunt ongebruikte verwijzingen naar oude binaire bestanden behouden)



  1. het isoleren van een subtekenreeks in een tekenreeks vóór een symbool in SQL Server 2008

  2. genereer_series() equivalent in MySQL

  3. Kan database niet verwijderen

  4. Hoe zie ik actieve SQL Server-verbindingen?