Eu acho que não é um problema tão incomum: um processo aloca grandes quantidades de memória (seja devido a um erro de vazamento de memória, porque você tenta processar um arquivo de entrada muito grande, ou qualquer outro). A RAM é preenchida e, em algum momento, o Linux precisa alternar para trocar. Bem, às vezes este é apenas o último recurso: se eu tiver uma computação cara em andamento, não quero perder dados se, no final, eu ficar sem memória RAM.
Mais frequentemente, porém (na minha experiência), o consumo de memória é ilimitado, por um processo desonesto, talvez com erros. Ou seja, eu não acabo com alguns dados menos urgentemente necessários movidos para swap, mas o SO é forçado a trocar panicamente cargas de dados. E que, infelizmente, não apenas interrompe strongmente o processo ofensivo, mas pode levar o sistema a ficar praticamente parado (não é tão ruim em máquinas com SSD, mas OTOH me preocupa se escrever gigabytes e gigabytes de dados de lixo podem a longo prazo prejudicar as células flash). Até eu perceber o problema e manualmente matar o processo (uma vez que realmente levou alguns minutos até eu mesmo me logado em um terminal virtual!), metade da minha sessão de corrida está em troca, e Eu preciso esperar um bom tempo até que o sistema funcione sem problemas novamente.
Existe uma solução dracônica para o problema: reforçar um limite de memória. Mas fazer isso em todo o sistema às vezes mataria os processos que eu ainda preciso, e se eu tiver que manualmente ulimit
antes de iniciar um processo ofensivo ... bem, eu frequentemente esquecerei até que seja tarde demais.
Possíveis tipos de solução com os quais ficaria mais feliz:
- Se qualquer processo exceder um determinado uso de memória, ele será artificialmente diminuído para que o restante do sistema permaneça responsivo.
- Se algum processo exceder um determinado uso de memória, será
SIGSTOP
ped, por isso, tenho tempo para descobrir o que fazer a seguir.
- Se um processo se aproximar do limite de RAM, recebo um aviso, antes do início da grande troca.
Existe alguma maneira de obter tal comportamento ou semelhante?