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 -al
por 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!
Respostas:
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.
fonte
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 ...
fonte
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.
fonte
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.
fonte
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 -df
para mostrar estatísticas de disco oudstat -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.
fonte