Esgotando o LowMem com o kernel do Ubuntu PAE e 32 GB de RAM

1

Estou executando um processo de importação de dados Java em uma máquina kernel PAE Ubuntu 10 de 32 bits. Depois de executar o processo por um tempo, o oom-killer finaliza meu processo Java. Depois de pesquisar no Google e vasculhar documentos, parece que o sistema está ficando sem LowMem. Eu iniciei o processo pela terceira vez e estou assistindo free -lm show me Low: 464 386 77 com o valor livre (77MB) diminuindo lentamente.

Por que estou ficando sem memória baixa e como aumentar isso?

Alguns detalhes:

$ cat /proc/sys/vm/lowmem_reserve_ratio
256     256      32
$ free -lm
             total       used       free     shared    buffers     cached
Mem:         32086      24611       7475          0          0      24012
Low:           464        407         57
High:        31621      24204       7417
-/+ buffers/cache:        598      31487
Swap:         2047          0       2047
    
por magneticMonster 29.12.2010 / 23:48

4 respostas

1

O problema é que muitas das estruturas de dados do kernel, como os descritores de página (uma estrutura para cada página de 4 KB no sistema) precisam estar com pouca memória. Assim, à medida que a memória total da máquina aumenta, mais e mais memória baixa também é necessária e, eventualmente, a pouca memória torna-se um recurso muito escasso.

IIRC a regra prática usual é que o total de 16 GB é sobre o limite superior normal para um kernel de 32 bits. Não há muito que você possa fazer sobre isso.

Você pode tentar inicializar com menos memória (mem = parâmetro da linha de comando para o kernel). Mas a solução real é mudar para um kernel de 64 bits.

    
por 15.05.2012 / 08:38
0

Desative o oom killer e veja qual é o resultado final. Publique também informações do uso da memória do processo, conforme aplicável. Dê uma olhada na saída do pmap para ajudar a decifrar. Eu executei grandes heaps Java sob o RHEL5 de 64 bits e nunca vi esse problema.

    
por 30.12.2010 / 00:07
0

Bem, não tenho certeza se estou correto, o tamanho da memória baixa é um dos parâmetros do kernel. Eu acho que um processo não pode crescer sobre o tamanho de pouca memória por causa do PAE, mas verifique este link

    
por 30.12.2010 / 00:10
0

O Gerenciamento de Memória a este respeito é bastante ruim no Linux. Vai levar o primeiro 4G de memória e dividi-los em 3/1. 1GB sendo LowMem. Com 32 GB de memória no sistema, ele já precisará de uma parte substancial desse 1 GB para fins de endereçamento. Durante os 2,4 dias houve uma discussão sobre colocar algum esforço nisso para tornar este limite configurável, ou para integrar o patch 4G / 4G, nenhum dos quais aconteceu, porém, como Linus não viu qualquer necessidade para isso, e as coisas foram já feio como eram, sem falar que o 4G / 4G também não é bonito. Ainda há um patch de 4g em torno de 2,6, mas ele foi escrito originalmente para o 2.6.6, que está muito desatualizado hoje. Por 2.6.7 estava bem claro que nunca seria mesclado, sua sobrecarga de desempenho era gigantesca de qualquer maneira, então a decisão foi tomada, que o Sistema VM já era bom o suficiente. Portanto, em 32 bits, provavelmente não há maneira de contornar esse problema, já que o sistema de memória simplesmente não deve ser dimensionado para essas quantidades de memória.

Por outro lado, em 64 bits, o endereçamento mudou consideravelmente, então você não encontrará esse problema.

    
por 10.03.2012 / 18:15