Mecanismo de virtualização de memória (ou: Acabando com a confusão em posts anteriores!)

Fiz uma confusão dos diabos com essa história de pilha de threads em posts anteriores, né? Pois é… eu mereço mesmo um belo chute no traseiro por não ter me lembrado do mecanismo de virtualização de memória. Agora vamos dar algum sentido às medições nos meus casos de uso anteriores…

Eu disse, acertadamente, que as threads usam pilhas de 8 MB (no caso do Debian), mas isso não parece ser verdadeiro se você medir o consumo de memória do sistema. Como é que pode?

A coisa funciona da mesma maneira que o sistema operacional aloca a memória usada por um processo. Cada processo, na arquitetura x86, pode usar até 2 GB de memória. Isso não significa que 2 GB serão alocados para o processo no ato da inicialização! Imagine um “hello world” consumindo 2 GB de RAM… absurdo, né?

No caso das pilhas das threads (e dos processos também), o sistema operacional aloca, inicialmente, apenas uma página (4 kB). A medida que a pilha vai sendo usada mais páginas são alocadas até o limite determinado por ulimit -s (não é à toa que o nome é “ulimit”, né?!).

Assim, a interpretação das equações que mostrei neste post, devem ser interpretadas como indicativo do máximo (e não do mínimo, como eu quis implicar) de memória que o sistema operacional poderá alocar para os processos e threads do Apache! No mesmo post você deve interpretar o cálculo feito, com base nas equações de dimensionamento de memória, como sendo específico para o caso de uso de meu teste (um Apache funcionando como proxy, sem aplicações rodando nas threads)…

Espero que a confusão tenha sido esclarecida e, também, que me perdoem…

Deixe um comentário