Servidores Apache Start, Min / Max Spare Servers Influência do Consumo de Ram

2

Eu tenho um VPS de 1 GB. Se eu parar o apache, eu tenho 400 mb de RAM livre. Assim, os clientes máximos devem ser (ram total - ram usado) / max_service_ram_consumption = 400/31. Então MaxClients deve ser 13.

Estas são as definições:

StartServers: number of server processes to start
MinSpareServers: minimum number of server processes which are kept spare
MaxSpareServers: maximum number of server processes which are kept spare
ServerLimit: maximum value for MaxClients for the lifetime of the server
MaxClients: maximum number of server processes allowed to start
MaxRequestsPerChild: maximum number of requests a server process serves

Estou usando o prefork (padrão do apache).

Minha configuração é esta:

Timeout 30
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 2

<IfModule mpm_prefork_module>
    StartServers          3
    MinSpareServers       3
    MaxSpareServers       10
    ServerLimit           50
    MaxClients            50
    MaxRequestsPerChild   1000
</IfModule>

O valor padrão para StartServers e MinSpareServers era 5. Eu mudei para 3. Não consigo ver nenhuma diferença no consumo de memória. Eu também mudei MaxClients de 150 para 50. E limitei MaxRequestsPerChild a 1000. (o padrão era 0 - ilimitado).

Por favor, diga-me como StartServers, MinSpareServers e MaxSpareServers influenciam o consumo de ram. E por que será melhor / errado ter valores menores / mais altos. Eu sei que esses valores influenciam o desempenho também. Mas não consigo encontrar em qualquer lugar uma boa calculadora de consumo de memória RAM.

Como configurar o apache.conf para poder ter cerca de 50/100 usuários no máximo?

    
por Pascut 03.11.2014 / 15:14

1 resposta

2

Você está no caminho certo. Aqui estão algumas coisas que devem ajudá-lo a descobrir os detalhes restantes.

Você precisa de um monitoramento detalhado do Apache em todas as estatísticas fornecidas por mod_status

  • "_" Aguardando conexão
  • "S" Iniciando
  • Solicitação de leitura "R"
  • "W" Enviando resposta
  • "K" Manter viva (ler)
  • Pesquisa de DNS "D"
  • Conexão de fechamento "C"
  • "L" Logging
  • "G" Terminando com graça
  • "I" Limpeza inativa do trabalhador
  • "." Abrir slot sem processo atual

A memória é sempre escassa, se você verificar todos os provedores de VMs, basicamente, cobrar o preço da VM com base em tamanho da memória que você recebe. Então, esteja atento quando você gastar isso.

Você pode definir o ServerLimit (precisa de apache stop / start para redefinir) e, em seguida, usar MaxClients (que pode ser ajustado com reinicialização) para definir o valor máximo que seu servidor poderá manipular. Esses valores estão lá para proteger alguém da Internet para esgotar seus recursos de servidores. Se você calculou, você pode ter 13 segmentos; 13 é.

Veja qual é o seu padrão de uso durante algum período de tempo e ajuste os StartServers para um uso médio. Então você começará com algo que está próximo do uso médio; e se o servidor da Web precisar atender a mais solicitações, haverá mais alguns funcionários. O volume desses será controlado pelo valor ceil de MaxClients e

  • MinSpareServers
  • MaxSpareServers

Assim, você não quer aumentar a quantidade de trabalhadores instantaneamente se o aumento do tráfego for pequeno; você preferiria girar o trabalhador ou dois para evitar o desperdício de memória com vários trabalhadores adicionais que provavelmente não serão usados. É preciso que MaxRequestsPerChild do processo gerado seja destruído e, em seguida, com base no uso, o Apache decidirá se precisa iniciar um novo para substituir o antigo.

Em relação a MaxRequestsPerChild, você quer evitar 0 aqui; Embora seja uma boa idéia manter as coisas armazenadas na memória para desempenho, você não tem memória de sobra para isso. Ter um número menor, como 1000 ou 2000, é provavelmente uma opção melhor do que o padrão 10000, pois a reciclagem de funcionários após atender a menos solicitações HTTP limitará sua vida útil na qual eles crescem gradualmente em termos de uso de memória. Então, reciclá-los mais cedo ou mais tarde economizará um pouco de memória.

Quanto à contagem de usuários; isso depende ... se os seus usuários estiverem indo muito bem para o servidor da Web durante o dia ou se todos precisarem do servidor da Web ao mesmo tempo. Você precisa monitorar (gráficos e outras coisas) a memória, o apache, o uso da CPU e outros dados de integridade do sistema e examiná-los quando tentar criar uma maneira mais suave de executar as coisas, pois não há receita geral para melhorar as coisas; isso depende muito dos casos de uso e dos padrões de uso.

No uso de memória do Apache, esse é um problema complicado. Cada thread do Apache tem acesso a determinada parte da memória. Esse espaço de endereçamento acessível é uma parte exclusiva desse processo específico, enquanto outras partes do espaço de endereço são compartilhadas com outros segmentos do Apache. Então, quando você quiser calcular o quanto todos usam, você quer ter certeza de que não conta para o mesmo espaço de endereço duas vezes.

Aqui está minha abordagem para calcular a pegada de memória do Apache; você provavelmente precisará alterar a primeira linha para caber o nome do processo do seu Apache porque dependendo da distribuição algum nome do processo Apache 'httpd' algum 'apache2' ou possivelmente algo que eu não consigo pensar agora ...

cmd='httpd'
ps -o size=,rss=,vsz= $(pgrep "$cmd") | awk '
  { size_sum += $1; rss_sum += $2; vsz_sum += $3; processes += 1 } 
  END {
    printf "Size  : %.2f (%.2f) MB\n",size_sum/1024,size_sum/1024/processes
    printf "RSS   : %.2f (%.2f) MB\n",rss_sum/1024,rss_sum/1024/processes
    printf "VSZ   : %.2f (%.2f) MB\n",vsz_sum/1024,vsz_sum/1024/processes
  }'

a saída deve se parecer com

Size  : 178.84 (16.26) MB
RSS   : 118.08 (10.73) MB
VSZ   : 1754.29 (159.48) MB

Isso é de um dos meus servidores da web. O primeiro valor em cada linha é total, o segundo entre parênteses é por processo avg. Para explicar os valores, vou citar ps man page

  • Tamanho : quantidade aproximada de espaço de troca que seria necessária se o processo fosse sujar todas as páginas graváveis e depois ser trocado. Este número é muito difícil!
  • RSS : tamanho do conjunto de residentes, a memória física não trocada que uma tarefa usou
  • VSZ : tamanho da memória virtual do processo

O que isso significa para sua matemática é; os processos podem crescer para VSZ size, eles estão usando RSS de RAM, o que você deseja usar em sua equação ao tentar calcular MaxClients / ServerLimit e SIZE é teoricamente o tamanho que seus processos poderiam tomar se fossem completamente trocados nosso devido a ser ocioso. Algumas fontes no tópico defendem o cálculo da pegada de memória usando o pmap como

ps -ef | grep httpd | grep -v ^root | awk '{ print $2 '} | xargs pmap -d | grep ^mapped: | awk '{ print $4 }' | cut -dK -f1 | awk '{ SUM += $1} END { print SUM/NR }'

Isso deve retornar o mesmo valor que SIZE que calculamos anteriormente.

    
por 03.11.2014 / 16:59