Oracle
 sql >> Database >  >> RDS >> Oracle

Erlang e il suo consumo di Heap Memory

Non ho avuto il tempo di guardare la fonte, ma ecco alcuni commenti:

Domanda 1. Con un server così potente, perché il sistema operativo non dovrebbe fornire tale memoria all'applicazione (era l'unica in esecuzione)?

Perché la macchina virtuale Erlang ha cercato di consumare più della memoria libera disponibile.

Domanda 2. All'Emulatore Erlang i start viene richiesto di essere in grado di generare tutti i processi necessari. il valore +P 13421779. IsErlang VM non riesce ad accedere a questa memoria o non riesce ad allocarla ai suoi processi?

No. Se avessi esaurito i processi, lo avrebbe detto la VM Erlang (e la VM sarebbe ancora attiva e funzionante):

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

Domanda 3. Per Solaris, vede un processo:epmd, forse contenente e avviando migliaia di micro thread. Quali configurazioni posso apportare a Solaris per non interrompere mai la mia applicazione per quanto possa essere "affamata di memoria"? Lo spazio di swap disponibile è 16 GB, RAM 20 GB, sinceramente, deve esserci qualcosa che non va.

epmd è il demone della mappatura delle porte di Erlang. È responsabile della gestione della distribuzione Erlang e non ha nulla a che fare con la tua applicazione Erlang individuale. I processi che dovresti cercare saranno name beam.smp più probabilmente. Questi mostreranno il consumo di memoria del sistema operativo della VM Erlang ecc.

Domanda 4. Quali configurazioni posso eseguire per l'emulatore Erlang, per evitare questi crash dump della memoria heap, specialmente quando tutta la memoria di cui potrebbe aver bisogno è disponibile sul server? Come farò a eseguire più app che consumano memoria su questo server se Erlang non riesce ancora ad allocare tale memoria a un semplice indicizzatore di file system (beh, è ​​fortemente simultaneo)?

La macchina virtuale Erlang dovrebbe essere in grado di utilizzare tutta la memoria disponibile nella tua macchina. Tuttavia, dipende da come è scritta la tua applicazione. Ci possono essere molte ragioni per le perdite di memoria:

  • Tabella Atom che si sta riempiendo (crei troppi atomi unici)
  • Le tabelle ETS o Mnesia non vengono raccolte (non si eliminano i vecchi elementi inutilizzati)
  • Memoria insufficiente per i processi (vengono generati troppi processi)
  • Sono stati creati troppi binari (potresti mantenere riferimenti inutilizzati a vecchi binari)