Eu encontrei duas explicações (da mesma coisa) a respeito de porque o kswapd0 faz a leitura constante do disco acontece bem antes que o OOM-killer elimine o processo problemático:
- veja a resposta e o comentário de esta resposta do askubuntu SE
- veja a resposta e os comentários de David Schwartz sobre esta resposta no unix SE
Vou citar aqui o comentário de 1. que realmente abriu meus olhos sobre porque eu estava recebendo leitura constante do disco enquanto tudo estava congelado :
For example, consider a case where you have zero swap and system is nearly running out of RAM. The kernel will take memory from e.g. Firefox (it can do this because Firefox is running executable code that has been loaded from disk - the code can be loaded from disk again if needed). If Firefox then needs to access that RAM again N seconds later, the CPU generates "hard fault" which forces Linux to free some RAM (e.g. take some RAM from another process), load the missing data from disk and then allow Firefox to continue as usual. This is pretty similar to normal swapping and kswapd0 does it. – Mikko Rantalainen Feb 15 at 13:08
Se alguém tiver uma maneira de desabilitar esse comportamento (talvez recompile o kernel com quais opções? ) , Por favor deixe-me saber o mais rápido possivel! Muito apreciado, obrigado!
EDIT: Acabei de encontrado vm.overcommit_memory=2 evita a debulha do disco que leva ao SO congelado (mesmo que o OOM-killer não tenha uma mudança para acionar, o que faz sentido, porque ele só é acionado bem depois da surra de disco, com vm.overcommit_memory=0
) como: cc1plus: out of memory allocating 127440 bytes after a total of 897024 bytes
EDIT2 ok o acima funcionou para mim com o padrão vm.overcommit_ratio=50
mas se eu configurá-lo para 200
então o disk-thrashing está de volta!
EDIT3 ignora essas 2 EDITs, elas não são o caminho para consertar isso porque processos que não teriam morrido antes morrem agora mais cedo, também vm.overcommit_ratio=0
fará com que tudo morra, ou alguma coisa. Tentarei encontrar uma maneira melhor, provavelmente precisando de recompilação do kernel e estou pesquisando os sinalizadores GFP relevantes ...
EDIT4: Eu encontrei uma maneira, através do patch de kernel, que funciona para mim; veja o patch em esta pergunta.