A criação de um arquivo grande empata a memória depois que o processo é concluído

2

Estou usando um servidor Ubuntu 14.04LTS (AWS EC2) para fazer um despejo de banco de dados personalizado, mas estou tendo um comportamento de memória muito estranho.

Estou usando o script CLI do PHP para percorrer a consulta de dump personalizado que é enviada para um arquivo numerado e, em seguida, cat desse arquivo para o arquivo de saída. O uso da memória sobe como esperado por causa do mysql. O arquivo mysql dump e o arquivo de saída são todos gravados em uma unidade montada separada (EBS).

Antes de iniciar o script, o uso de memória é de cerca de 20%. Quando o processo é concluído, o uso da memória é de cerca de 90%, com base nos gráficos em htop . Eu verifiquei o uso com free -m . Uma reinicialização do mysql reduz o uso da memória para cerca de 50%.

Eu usei lsof para verificar se nada está usando o arquivo. Eu até fiz lsof no diretório e só recebi meu processo bash e lsof.

A parte mais estranha é que, assim que eu apago o arquivo, o uso da memória cai para 20%.

Eu tentei apagar o arquivo sem reiniciar o mysql e o uso cai em 30% os números acima esperados.

Usar o script de visualizador de memória encontrado aqui não mostra o mesmo uso de memória, portanto, presumo que não seja totalmente preciso. Não mostra consumo de memória mantendo o arquivo.

Existe alguma outra maneira que eu possa dizer o que está segurando a memória?

    
por David Fairbanks 10.05.2016 / 22:59

1 resposta

3

O que você realmente está vendo é o uso do cache de disco do sistema. Todo o sistema moderno armazenará em cache as operações de disco para tornar mais rápido o acesso recorrente da mesma área de disco.

Considera-se que este processo de armazenamento em cache custa muito pouco recurso para os benefícios frequentes que pode gerar mais tarde. Como o sistema sabe que o cache não é importante em comparação com qualquer outro requisito de memória, ele despejará partes dele imediatamente, se necessário, para outra coisa.

Você também está percebendo o cache interno do processo do servidor MySQL, que agirá de forma semelhante ao cache do sistema operacional, mas o sistema operacional não reconhece isso como cache, e é por isso que ele é liberado apenas com base nas operações através do próprio processo do servidor. como, por exemplo, reiniciá-lo.

    
por 10.05.2016 / 23:20