Como fazer o sistema matar automaticamente alguns processos?

1

Às vezes, meu computador começa a se comportar lentamente depois de executar muitos programas / processos simultaneamente, em pontos que parecem estar paralisados / congelados. Usando o Debian Linux, existe uma maneira de matar automaticamente alguns processos antes que a memória fique muito escassa para uma operação suave?

    
por Zignd 23.06.2012 / 02:19

1 resposta

2

Basicamente, você quer um daemon que monitore a memória livre, e se ela cair abaixo de um determinado limite, ela escolhe algum processo e mata-os para liberar alguma memória.

while (true) {
    size_t free_memory = get_free_memory();
    if (free_memory < free_memory_threshold) {
        pid_t pid = choose_a_process_to_kill();
        kill(pid, SIGTERM);
    }
}

Uma pergunta óbvia é: como você escolhe processos para matar? Uma resposta fácil seria aquela com o maior uso de memória, já que é provável que esse seja o "porco da memória" que se comporta mal, e matar esse processo liberará memória suficiente para muitos outros processos.

No entanto, uma questão mais fundamental é: é realmente correto matar um processo desses para liberar memória para os outros? Como você sabe que o grande processo é menos importante do que os outros? Não há resposta geral. Além disso, se mais tarde você tentar executar esse grande processo novamente, permitirá que ele expulse muitos outros processos? Se você fizer, não haverá um loop infinito de vingança ?

Na verdade, o mecanismo de memória virtual já está fazendo coisas semelhantes para você. Em vez de matar processos, troca parte de sua memória para o disco, para que outros possam usá-lo. Quando o processo anterior tenta usar a parte da memória posteriormente, o mecanismo de memória virtual troca as páginas . Quando isso está acontecendo de diferentes processos contenciosamente (o que é chamado de debater ), você precisa encerrar alguns processos para liberar a memória, ou mais preferencialmente, fornecer mais memória. Quando o sistema inicia

    
por 23.06.2012 / 07:31