Linux com 256GB de mem / 48 Cores - A máquina começa a bater / sufocar com toneladas de memória sobrando

12

Máquina: Dell r815, CentOS 5.4, 256 GB de RAM, 4 x 12 cores.

Nós temos um aplicativo que tem um arquivo de 275GB. Ele faz uma ordenação em 20 GB de dados de cada vez, ou seja, troca bits e os substitui no mesmo arquivo. Isso tudo funciona bem.

Há um último passo que, então, lê todo o arquivo e faz uma mesclagem nos diferentes pedaços de 20 GB, e os envia para um arquivo totalmente novo.

Este processo parece rodar bem por um tempo e acaba liberando cerca de 50 GB para o disco. Algum tempo depois disso, a máquina INTEIRO começa a pirar.

Comandos simples como ps -ef , ls -al , travam por um longo tempo e aparecem como tendo 100% de CPU (que é apenas um núcleo).

Olhando as estatísticas de memória em top , vejo que está usando cerca de 120 GB de RAM (portanto, 128 GB livres) e tem 120 GB na seção "em cache".

Alguém já viu esse tipo de comportamento antes? O mesmo processo corre bem em uma máquina com 64GB de memória - então, de alguma forma, acho que está relacionado ao monte de RAM que tenho na máquina.

(enquanto falamos, estou executando o teste nesta máquina com menos de 64 GB - para descartar um problema de hardware).

Eu talvez esteja perdendo alguns params vm em /etc/sysctrl.conf ?

Obrigado!

    
por aspitzer 17.11.2010 / 22:13

5 respostas

12

Então, isso parecia ser um bug do kernel no Cedora 5.4 e 64bit do Fedora 14. Depois que instalei o Centos 5.5, o problema desapareceu.

Desculpe, não tenho uma resposta melhor para todos ...

    
por 18.11.2010 / 21:13
12

Sua pergunta me lembrou algo que li recentemente:

link

Isso aborda como as arquiteturas NUMA (como você pode encontrar, digamos, um sistema AMD de 48 núcleos) afetam a alocação e a troca de memória. Eu não sei se isso é o que você está encontrando, mas soou suficientemente similar para que valha a pena ler.

Mesmo que não seja a resposta, é uma leitura fascinante.

    
por 17.11.2010 / 23:03
0

Você pode tentar adicionar uma linha ao /etc/sysctl.conf para especificar que a troca deve ser usada somente quando for absolutamente necessário.

swappiness = 0

Você já deve estar ciente de que este arquivo define as configurações globais, portanto, é necessário considerar o impacto que essa alteração terá nos demais aplicativos em execução no ambiente.

    
por 17.11.2010 / 22:47
0

Onde está seu espaço temporário? Muitas vezes é em tempfs. O Tempf extrai espaço da memória backups pelo espaço de troca, portanto, se você acabar com muita coisa no tempfs, ele ativará a E / S de troca.

Dado o tamanho dos dados que você está mesclando, esperaria swappiness quando você atingir a mesclagem final.

A distribuição do seu armazenamento de permuta em vários discos pode ajudar.

    
por 18.11.2010 / 04:17
0

Embora você possa não estar entrando em swap, você ainda pode estar limitado por E / S. A informação ls sugere isso.

Eu verificaria a saída de dstat -df para mostrar estatísticas de disco, ou dstat -af (sim, seria um bajillion de colunas de largura; é o que acontece quando você tem 48 núcleos e mostra a utilização da CPU em todos eles ) se você quiser ver tudo.

Eu ficaria surpreso se todas as CPUs estivessem ocupadas (a ordenação por mesclagem não é uma tarefa intensiva da CPU), mas você não diz nada sobre o seu sistema de E / S. Se você tiver poucos discos e um monte de arquivos, você pode estar debatendo o disco fazendo buscas em cada arquivo para manter o tipo de mesclagem alimentado.

    
por 18.11.2010 / 05:33