Além das outras respostas, você pode configurar o Linux para exigir o backup de qualquer memória alocada, mesmo que os programas não o usem.
Supercomprimir memória e temer o OOM killer não são partes necessárias da experiência do Linux, no entanto. Simplesmente definir o parâmetro sysctl vm / overcommit_memory como 2 desativa o comportamento de supercomprometimento e mantém o killer do OOM para sempre à distância. A maioria dos sistemas modernos deve ter espaço em disco suficiente para fornecer um amplo arquivo de troca para a maioria das situações. Em vez de tentar impedir que processos de estimação sejam eliminados quando a memória supercomprometida acabar, pode ser mais fácil evitar a situação completamente. [ Respite do assassino de OOM ]
Se um programa alocar memória, o kernel pode simplesmente marcar mais páginas de troca como confirmadas. Essa indicação é armazenada no gerenciador de memória do kernel, o espaço em disco real ainda não foi tocado. Até que essa memória seja usada, nada precisa ser trocado dentro ou fora. Se eles nunca forem usados, o uso de swap flutuará sem afetar o desempenho.
Como os processos são apresentados com seu próprio espaço de endereço ou "visualização" (é assim que a troca funciona em primeiro lugar), o kernel tem muita margem de manobra na maneira como gerencia isso. Usando um exemplo de fork também do artigo vinculado acima, como é muito mais provável que você tenha páginas de memória compartilhada do que alocar recentemente uma grande quantidade de memória não utilizada, a memória pode ser alocada cópia-na-gravação, aumentando a contagem de uso de troca. Quando realmente é gravado (o que pode não acontecer), a "troca confirmada" pode ser substituída por qualquer RAM não utilizada (aumentando o uso da RAM e diminuindo o uso da troca). Imagine um processo com 500 MB alocados que garfos em uma máquina com toda ou quase toda a RAM em uso. Se houver 500 MB disponíveis no swap (e o espaço em disco for barato, qual o tamanho de 1% das unidades de TB atuais?: P), nenhuma memória precisará ser copiada (ainda,
Assim, é evitada a possibilidade do killer OOM, e é muito mais simples projetar a maioria dos softwares com o pressuposto de que as alocações de memória (incluindo alocações "implícitas" por meio de algo como fork) são bem-sucedidas ou falham imediatamente, com a constatação prática de que se a memória deve ser trocado, isso pode afetar o desempenho. Esse impacto é quase sempre leve, mas, na pior das hipóteses, leva à troca de thrashing (ainda às vezes preferível a uma falha total do kernel ou a um OOM killer).
Embora eu não conheça os detalhes exatos de como o gerenciador de memória do Linux funciona, essa resposta é meu próprio entendimento generalizado e o que eu lembro de ler ao longo dos anos. Tentei reeditar esta resposta para que seja necessária uma compreensão mínima do design do sistema operacional (é consideravelmente complexo e não é algo que me interessa muito), mas parece divagar um pouco; entre em contato se você ver como isso poderia ser melhorado. Por outro lado, pode não ser uma pergunta tão embaraçosamente básica.