Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Erlang e seu consumo de memória heap


Não tive tempo de ver a fonte, mas aqui vão alguns comentários:

Pergunta 1. Com um servidor tão poderoso, por que o sistema operacional não forneceria essa memória para o aplicativo (era o único aplicativo em execução)?

Porque a VM Erlang tentou consumir mais do que a memória livre disponível.

Questão 2. O Emulador Erlang i start é instruído para poder gerar quantos processos forem necessários. o valor +P 13421779. IsErlang VM não consegue acessar esta memória ou não consegue alocá-la para seus processos?

Não. Se você ficasse sem processos, a VM Erlang teria dito isso (e a VM ainda estaria em funcionamento):
=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}]}

Pergunta 3. Para o Solaris, ele vê um processo:epmd, talvez contendo e iniciando milhares de micro threads. Que configurações podem ser feitas no Solaris para nunca parar meu aplicativo, por mais "com fome de memória" que ele possa ter? O espaço de troca disponível é de 16 GB, RAM de 20 GB, honestamente, deve haver algo errado.

epmd é o deamon de mapeamento de porta Erlang. Ele é responsável por gerenciar a distribuição de Erlang e não tem nada a ver com seu aplicativo Erlang individual. Os processos que você deve procurar serão o nome beam.smp provavelmente. Eles mostrarão o consumo de memória do sistema operacional da VM Erlang etc.

Pergunta 4. Quais configurações posso fazer no Emulador Erlang, para evitar esses crash dumps de memória heap especialmente quando toda a memória que ele pode precisar está disponível no servidor? Como executarei mais aplicativos que consomem memória neste servidor se o Erlang ainda não conseguir alocar essa memória para um indexador de sistema de arquivos simples (bem, é muito simultâneo)?

A VM Erlang deve ser capaz de usar toda a memória disponível em sua máquina. No entanto, isso depende de como seu aplicativo está escrito. Pode haver muitas razões para vazamentos de memória:
  • Preenchimento da tabela de átomos (você cria muitos átomos únicos)
  • As tabelas ETS ou Mnesia não são coletadas como lixo (você não exclui elementos antigos não utilizados)
  • Memória insuficiente para processos (você gera muitos processos)
  • Muitos binários são criados (você pode manter referências não utilizadas a binários antigos)