Suspender / retomar o processo único de / para o disco

18

Ocasionalmente, gostaríamos de suspender processos intensivos de memória em nossos servidores Ubuntu e OS X para liberar temporariamente alguma RAM para outros trabalhos. Se tudo o que estávamos preocupados fosse com o uso da CPU, um Ctrl-Z simples funcionaria. No entanto, precisamos liberar a RAM (gravando-a no disco) e, em seguida, reiniciar o processo (disco - > RAM) ou, em outras palavras, "hibernar" um único processo. Alguma pista sobre como fazer isso? (De preferência do CLI.) Obrigado.

    
por Mike Covington 22.10.2011 / 10:56

4 respostas

7

Não existe uma facilidade geral para hibernar um único processo, apenas o sistema inteiro.

No entanto, se você não se importa que a imagem do processo não sobreviva a uma reinicialização, existe um recurso interno para salvar a imagem do processo no disco: a troca. Certifique-se de ter 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 que precisará de um tempo de resposta rápido em algum momento, poderá forçar uma grande quantidade de RAM a ser liberada agora alocando um monte de RAM em um processo de curta duração, por exemplo,

perl -e '$tmp = "a" x 999999999' # allocate about 1GB

Você não obtém nenhum controle sobre o que é trocado, para que outros processos possam ser trocados. No Linux, você pode trocar um processo de volta forçosamente acessando as páginas que ele mapeia. O script em esta 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 mais informações).

    
por 22.10.2011 / 18:33
11

O termo que você está procurando é " Checkpointing de aplicativos ".

As ferramentas que sei que podem fazer são CryoPID e CryoPID2 .

Ambas as ferramentas são apenas para Linux.

Eu não conheço uma ferramenta semelhante para o BSD ou OS X.

    
por 25.11.2012 / 18:32
4

Verifique se você tem muito espaço de troca. Certifique-se de que seu sistema esteja configurado para preferir trocar páginas inativas ( vm.swappiness = 100 ). Então deve ser suficiente para suspender o processo. O kernel preferirá trocar as páginas inativas.

    
por 22.10.2011 / 20:30
-1

No Mac OS X, você pode tentar usar o Comando purge (fornecido com o Xcode) para liberar alguma RAM (inativa).

vm_stat
purge
vm_stat
    
por 22.10.2011 / 12:17