Linux com 256 GB de mem / 48 núcleos - A máquina começa a se debater / sufocar com toneladas de memória restantes

12

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

Temos um aplicativo que possui um arquivo de 275GB. Ele classifica 20 GB de dados por vez, ou seja, troca bits e os substitui no mesmo arquivo. Tudo isso funciona bem.

Há uma última passagem que lê o arquivo inteiro e faz uma classificação de mesclagem nos diferentes blocos de 20 GB e os envia para um arquivo totalmente novo.

Esse processo parece funcionar bem por um tempo e acaba liberando cerca de 50 GB no disco. Algum tempo depois disso, a máquina inteira começa a surtar.

Comandos simples como ps -ef, ls -alpor um longo tempo, aparecem como tendo 100% da CPU (que é apenas um núcleo).

Observando as estatísticas de memória top, vejo que ele usa 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 funciona bem em uma máquina com 64 GB de memória - então, de alguma forma, acho que está relacionado à montagem de RAM que tenho na máquina.

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

Talvez eu esteja faltando alguns parâmetros vm /etc/sysctrl.conf?

Obrigado!

aspirador
fonte
O que os discos estão fazendo? Você está entrando no inferno ????
Arenstar 17/11/2010
Kernel de 64 bits / app / etc? você mencionou 100% da CPU, o que é a média de carga, quando isso acontece, é o aplicativo de vários segmentos (ele não vai usar todos os processadores se não), o vmstat 4 lhe diz (io / cpu especificamente)
coredump
como "ps", 100% da CPU está fora dos 4800% (porque 48 núcleos) - portanto, é mais provável que sejam bloqueados por io ou algo assim. a média de carga na caixa apenas como 5. os discos, que são de estado sólido não está vendo um monte de gravações ... Parece que mais uma questão de kernel então recursos
aspitzer
a máquina não está trocando nada.
aspitzer
1
sim .. rodando com 64gb agora. deve saber dentro de uma hora se relacionado com a quantidade total de mem na máquina
aspitzer

Respostas:

12

Sua pergunta me lembrou algo que li recentemente:

http://jcole.us/blog/archives/2010/09/28/mysql-swap-insanity-and-the-numa-architecture/

Isso aborda como as arquiteturas NUMA (como você pode encontrar em, por exemplo, um sistema AMD de 48 núcleos) afetam a alocação e a troca de memória. Não sei se é com isso que você está se deparando, mas parecia suficientemente semelhante para que valha a pena ler.

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

larsks
fonte
1
Parece uma chance digna do problema dessa pergunta. E é uma leitura fantástica.
Coredump #
1
Essa é uma ótima leitura, e 4 soquetes, 256 GB de RAM = 64 GB por nó, e parece que você está tendo problemas, o que replica exatamente a situação no documento.
Mark Henderson
12

Portanto, isso parecia ser um bug do kernel no Centos 5.4 e 64 bits do Fedora 14. Depois de instalar o Centos 5.5, o problema desapareceu.

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

aspirador
fonte
1
Ei cara, se é isso que consertou, foi o que consertou. Dê a si mesmo a marca de verificação, para que outras pessoas podem aprender com suas dificuldades :-)
mfinni
0

Você pode tentar adicionar uma linha ao /etc/sysctl.conf para especificar que o swap deve ser usado apenas quando for absolutamente necessário.

swappiness = 0

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

NginUS
fonte
isso já está definido ... mas, como mencionei, há 128 GB de graça - portanto, não há problemas de troca.
aspitzer
0

Onde está o seu espaço temporário? Muitas vezes, é no tempfs. O Tempfs extrai espaço da memória armazenada em backup pelo espaço de troca, portanto, se você acabar com muitas coisas no tempfs, ele acionará a E / S de troca.

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

Espalhar seu armazenamento de swap em vários discos pode ajudar.

BillThor
fonte
0

Embora você não esteja atingindo a troca, você ainda pode estar ligado à E / S. A informação ls sugere isso.

Eu examinaria a saída de dstat -dfpara mostrar estatísticas de disco ou dstat -af(sim, será um bajilhão de colunas; é o que acontece quando você tem 48 núcleos e mostra a utilização da CPU em todas elas) se quiser ver tudo.

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

Slartibartfast
fonte