sql >> Base de Datos >  >> RDS >> Oracle

Erlang y su consumo de Heap Memory

No he tenido tiempo de mirar la fuente, pero aquí hay algunos comentarios:

Pregunta 1. Con un servidor tan poderoso, ¿por qué el sistema operativo fallaría en proporcionar dicha memoria a la aplicación (era la única aplicación en ejecución)?

Porque la máquina virtual de Erlang intentó consumir más de la memoria libre disponible.

Pregunta 2. El Erlang Emulator i start está instruido para generar tantos procesos como sea necesario. el valor +P 13421779. ¿Erlang VM no puede acceder a esta memoria o no puede asignarla a sus procesos?

No. Si se hubiera quedado sin procesos, la máquina virtual de Erlang lo habría dicho (y la máquina virtual aún estaría en funcionamiento):

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

Pregunta 3. Para Solaris, ve un proceso:epmd, que quizás contiene e inicia miles de microprocesos. ¿Qué configuraciones puedo hacer en Solaris para poder nunca detener mi aplicación por mucha "memoria hambrienta" que pueda tener? El espacio de intercambio disponible es de 16 GB, RAM de 20 GB, sinceramente, debe haber algo mal.

epmd es el demonio de mapeo de puertos de Erlang. Es responsable de administrar la distribución de Erlang y no tiene nada que ver con su aplicación individual de Erlang. Los procesos que debe buscar serán de nombre beam.smp más probable. Estos mostrarán el consumo de memoria del sistema operativo de la máquina virtual Erlang, etc.

Pregunta 4. ¿Qué configuraciones puedo hacer en el emulador de Erlang para evitar estos volcados de memoria en montón, especialmente cuando toda la memoria que pueda necesitar está disponible en el servidor? ¿Cómo ejecutaré más aplicaciones que consumen más memoria en este servidor si Erlang aún no puede asignar dicha memoria a un indexador de sistema de archivos simple (bueno, es muy concurrente)?

La máquina virtual Erlang debería poder usar toda la memoria disponible en su máquina. Sin embargo, depende de cómo esté escrita su aplicación. Puede haber muchas razones para las fugas de memoria:

  • La tabla de átomos se está llenando (creas demasiados átomos únicos)
  • Las tablas ETS o Mnesia no se recolectan como basura (no se eliminan los elementos antiguos no utilizados)
  • No hay suficiente memoria para los procesos (genera demasiados procesos)
  • Se crean demasiados archivos binarios (es posible que conserve referencias no utilizadas a archivos binarios antiguos)