Ocasionalmente, gostaríamos de suspender processos com muita memória em nossos servidores Ubuntu e OS X para liberar temporariamente RAM para outros trabalhos. Se estivéssemos preocupados com o uso da CPU, um simples Ctrl-Z
funcionaria. No entanto, precisamos liberar a RAM (gravando-a no disco) e reiniciar o processo (disco -> RAM) ou, em outras palavras, "hibernar" um único processo. Alguma pista sobre como fazer isso? (De preferência da CLI.) Obrigado.
22
Respostas:
Não há facilidade geral para hibernar um único processo, apenas todo o sistema.
No entanto, se você não se importa com o fato de a imagem do processo não sobreviver a uma reinicialização, há um recurso interno para salvar a imagem do processo no disco: troca. Verifique se você possui espaço de troca suficiente e, se houver pressão de memória e o processo não estiver ativo (por exemplo, porque está suspenso), sua memória será trocada.
Se você sabe que o processo provavelmente ficará inativo por um longo tempo e precisará de um tempo de resposta rápido em algum momento, você pode forçar a liberação de muita RAM agora, alocando muita RAM em uma processo de curta duração, por exemplo
Você não tem controle sobre o que é trocado, portanto outros processos podem ser trocados. No Linux, você pode alternar um processo acessando à força as páginas que ele mapeia. O script nesta resposta fará isso: carregar na memória todas as páginas mapeadas por um processo (observe que isso inclui arquivos abertos; você pode percorrer regiões seletivamente com base nas informações do mapa para evitar a troca de dados que você sabe que não precisará , consulte esta resposta para obter mais informações).
fonte
O termo que você está procurando é " Ponto de verificação do aplicativo ".
As ferramentas que eu sei que podem fazer isso são o CryoPID e o CryoPID2 .
Ambas as ferramentas são apenas para Linux.
Não conheço uma ferramenta semelhante para BSD ou OS X.
fonte
Verifique se você tem bastante espaço de troca. Verifique se o seu sistema está configurado para preferir trocar páginas inativas ( vm.swappiness = 100 ). Então deve ser suficiente suspender o processo. O kernel prefere trocar as páginas inativas.
fonte
No Mac OS X, você pode tentar usar o
purge
comando (fornecido com o Xcode) para liberar alguma RAM (inativa).fonte
purge
não ajudaria aqui. Ele remove o cache do disco, mas isso não fará com que a memória de um processo seja trocada e não tornará mais rápido para outro processo obter RAM.