Fala pessoal, há alguns meses atrás estava lendo um artigo em uma revista, não me lembro exatamente qual era, se não me engano era uma revista sobre linux e virtualização, enfim, ouvi um termo que até então era não muito comum a minha pessoa. Eu já tinha ouvido falar sobre o termo overcommit, em artigos relacionados ao Virtual PC, da microsoft. Isso foi muito badalado por aí, muitas pessoas criticaram a microsoft ter habilitado, se não me engano eles responderam que alguns clientes pediram, mais que foi deixado uma opção para desabilitar o overcommit.

Bom um dos fatos que me chamou atenção, é que no kernel do linux e em distribuições atuais, esse tal de overcommit é usado e vem ativado como padrão em nossos queridos e amados sistemas que utilizam o famoso kernel linux.

juniorvicios@horus:~$ cat /proc/meminfo

Afinal, o que é este overcommit?
-Basicamente em um sistema linux, agente tem a memória real e a memória virtual(swap), certo. Digamos então que eu tenha um pc com 1 GB de ram e um arquivo swap de 1,6 GB. Eu só poderia utilizar até 2,6GB de memória,né?  Né não, zé. O overcommit do kernel, permite que você use mais do que isso.

Por que, não dá problema? E os programas que estão usando 100% já?
-Bom segundo o que dizem por aí, acontece que muitos programas não usam toda a memória que reservam assim que iniciam. Um programa que ao abrir reserva para ele 256MB de memória, dificilmente vai usar toda ela, ou seja o kernel pega uma sobrinha daqui e dali para atender todo mundo.

Bom, mais não tem perigo se todos usarem aquilo que reservaram?
-Então, aí entra em cena  o OOM(Out Of Memory) Killer. Bom, imagino que vocês já o conheçam, mais basicamente o que ele faz é matar alguns processos que estajam consumindo memória. a idéia de funcionamento dele é matar o mínimo de processos possível, ele faz através de um “programa de pontos”  a seleção qual/quais processo será eliminado. É basicamente uma roleta russa.

Eu nunca tive problemas com o overcommit no linux. E também não tenho nenhum ambiente linux encarregado de grandes tarefas, como em ambientes de produção e servidores de máquinas virtuais, que é a propósito onde esse termo overcommit vem sido bastante discutido. Eu achei uma história interessante, na verdade uma analogia do overcommit, como overbooking feito pelas companhias de aviação. Acho que a prática é bem mais comum nos EUA. Mais já ouvi relatos de amigos que passaram por isso aqui no Brasil, vou colar aqui o texto que li:

Uma companhia de aviões descobriram que era mais barato para fazer seus planos
com menos de combustível a bordo. Os aviões seriam mais leves e consomem menos combustível
e o dinheiro era guardado. Em raras ocasiões, no entanto, o montante do combustível foi
insuficiente, e, o avião cairia. Esse problema foi resolvido por
os engenheiros da empresa, o desenvolvimento de uma OOF especiais
(Out-of-combustível) mecanismo. Em casos de emergência um passageiro foi selecionado
e jogado para fora do avião. (Quando necessário, o procedimento foi
repetido.) Um grande número de teoria foi desenvolvida e muitas publicações
foram dedicados ao problema de selecionar corretamente a vítima a ser
ejetado. Se a vítima é escolhida ao acaso? Ou deve-se escolher
a pessoa mais pesada? Ou o mais velho? Os passageiros devem pagar para não
para ser ejetado, de modo que a vítima seria mais pobres a bordo? E
Se, por exemplo, a pessoa mais pesada foi escolhido, deve haver um
excepção especial no caso de que era o piloto? Caso de primeira classe
passageiros ser dispensados? Agora que o mecanismo de OOF existisse, seria
ser ativado de vez em quando, e os passageiros ejetar, mesmo quando há
houve falta de combustível. Os engenheiros ainda estão estudando precisamente como
essa disfunção é causada.”  - (traduzido pelo Google translate desta lista aqui. ou vocês acham que eu vou ficar traduzindo algo para vocês? ).

Acho que ninguém foi ejetado rsrs, isso é uma analogia. Mais a prática de overbooking existe mais a pessoa sai do avião antes dele decolar, hehe tudo nos bastidores.
Existem 3 níveis de overcommit, resumindo os níveis: 
  • Nível 0: Basicamente somente o root pode fazer overcommit.
  • Nível 1: É padrão ser feito overcommit para todos os usuários.
  • Nível 2: Desativado o overcommit.

Bom, eu atualmente estou utilizando o ubuntu. Vamos checkar agora o nível do meu overcommit:

juniorvicios@horus:~$ cat /proc/sys/vm/overcommit_memory
0
juniorvicios@horus:~$ cat /proc/sys/vm/overcommit_ratio
50

Lembrando que o ratio ajuda no cálculo do tamanho de memória que o kernel vai “inventar” para suprir as necessidades do sistema.Se você quiser desabilitar o overcommit do seu sistema, embora eu não recomendo. Entre em modo root ou sudo e faça o seguinte:

juniorvicios@horus:~$ sudo sysctl -w vm.overcommit_memory=2
juniorvicios@horus:~$ sudo sysctl -w vm.overcommit_ratio=0

Como eu disse, eu nunca tive problemas com o overcommit ligado. Se você tem um hardware “humilde”, o overcommit pode ser de grande ajuda para você, afinal de contas esse monte de programa que tu usa simultaneamente, essas várias abas de navegador aberta são a prova do que o overcommit faz na sua vida, rsrs.

O Objetivo foi mostrar que o overcommit existe e embora agente muitas vezes não faça idéia do seja, ele está sempre lá olhando por nós, nos momentos que “nosso firefox fica faminto, com uma fome extrema de memória”. Se você usa um ambiente de produção, você usa algumas maquinas virtualizadas, aí pode não ser uma grande idéia deixar o kernel brincar com overcommit, isso vem sido muito discutido como eu disse no início do artigo. Espero ter simplificado bastante esse assunto e não ficado algo chato.

Abraços e nos vemos no próximo artigo.
JuniorVicios