Apache carga pesada VIRT vs memória RES

8

Eu tenho um servidor Debian 5, que recebe muito tráfego. No momento, o servidor possui 4 GB de RAM e nenhuma memória de troca. Vejo no topo que os processos Apache consomem aproximadamente 180 MB de memória virtual (VIRT) cada um e 16 MB de RAM real (RES). Então, quantos threads do Apache posso executar ao mesmo tempo? Cerca de 4 GB / 180 MB = 22 ou 4 GB / 16 MB = 256?

pako
fonte

Respostas:

10

O tamanho da memória virtual não é tão importante quanto o seu conjunto de residentes. A memória virtual incluirá itens mapeados, como bibliotecas compartilhadas e outros enfeites (que só serão residentes na RAM física uma vez). O RSS informa o que realmente está na memória, onde o Virt. informa quanto do espaço de endereço virtual disponível foi ingerido.

Seu segundo cálculo será mais próximo, embora seja bastante baixo. Um servidor com 4 GB de RAM pode executar muito mais do que 256 processos Apache. Dependendo dos padrões de tráfego e das limitações de espera de E / S, executar mais de 256 pode ser uma boa ideia, pois um bom número desses processos pode ficar parado esperando o kernel transferir dados de dispositivo para dispositivo. Também considere coisas como COW e o fato de que tudo aponta para o mesmo binário 'httpd' e você obtém mais eficiência.

Agora, reconstrua seu sistema com 2 GB de espaço de troca. A troca não atua mais como "memória lenta".

Como uma isenção de responsabilidade, já faz muito tempo que não me importo com as especificidades do gerenciamento de memória do Linux e posso desconhecer um pouco meus fatos, mas a essência é sólida!

McJeff
fonte
por que ele pode executar muito mais que 256 processos apache? Eu tenho aplicativos que 8Gb podem rodar apenas 8.
gcb
-1. "Um servidor com 4 GB de RAM pode executar muito mais que 256 processos Apache" com seus 16 MB por processo, isso fará com que a troca seja um pecado fundamental, de acordo com todas as guias de desempenho que lemos sobre este assunto.
cabra
O que acontece se você executar heap de jvm de 4 GB (com threads ilimitados) em um sistema com 16 GB de RAM total disponível e freerelatar que a memória inteira está cheia? 0 ou algumas 100mb de memória livre? Qual é uma boa proporção de memória usada / livre para um "contêiner" da jvm?
Niken 15/05
1

Esse valor deve-se principalmente à experimentação com a carga atual do servidor.

tente coletar alguns dados com o 'apache top'. Faça algumas alterações na configuração e tente novamente. Como eu não conheço o seu caso de uso específico, é difícil criar algumas figuras concretas.

Se você deseja um consumo de memória previsível para o seu servidor da web, consulte http://wiki.nginx.org/Main

Ele resolve alguns problemas de escalabilidade de uma maneira muito interessante.

Não é adequado para todos os casos de uso, mas certamente considere.

Você pode implementá-lo para reduzir a carga na sua instância do apache. É adequado para servir conteúdo estático e de cache em uma configuração de proxy reverso, bem como em outros cenários de alta carga.

Dê um giro, é grátis :-)

O zelador do Unix
fonte