Você pode encontrar a documentação em man 5 proc
( ou no kernel.org ):
/proc/sys/vm/overcommit_memory This file contains the kernel virtual memory accounting mode. Values are: 0: heuristic overcommit (this is the default) 1: always overcommit, never check 2: always check, never overcommit In mode 0, calls of mmap(2) with MAP_NORESERVE are not checked, and the default check is very weak, leading to the risk of getting a process "OOM-killed". In mode 2 (available since Linux 2.6), the total virtual address space that can be allocated (CommitLimit in /proc/mem‐ info) is calculated as CommitLimit = (total_RAM - total_huge_TLB) * overcommit_ratio / 100 + total_swap
A resposta simples é que definir a supercomprometida como 1 definirá o cenário para que, quando um programa chamar algo como malloc()
para alocar um pedaço de memória ( man 3 malloc
), ele sempre será bem-sucedido, independentemente de o sistema saber não terá toda a memória que está sendo solicitada.
O conceito subjacente para entender é a idéia de memória virtual . Programas ver um espaço de endereço virtual que pode, ou não, ser mapeado para a memória física real. Ao desabilitar a verificação de supercomprometimento, você diz ao sistema operacional que assuma que sempre há memória física suficiente para fazer o backup do espaço virtual.
Exemplo
Para destacar por que isso às vezes importa, dê uma olhada no Redis orientações sobre o porquê vm.overcommit_memory
deve ser definido como 1 para ele.