MaxClients no apache. Como saber o tamanho do meu processo?

9

De link

The single biggest hardware issue affecting webserver performance is RAM. A webserver should never ever have to swap, as swapping increases the latency of each request beyond a point that users consider "fast enough". This causes users to hit stop and reload, further increasing the load. You can, and should, control the MaxClients setting so that your server does not spawn so many children it starts swapping. This procedure for doing this is simple: determine the size of your average Apache process, by looking at your process list via a tool such as top, and divide this into your total available memory, leaving some room for other processes.

A questão principal é que eu não consigo entender como saber o tamanho, porque, bem, eu tenho o tamanho do httpd em não mais de 3888

Mas, se precisarmos determinar o número de MaxClients e eu tiver 4GB de RAM, obtenho: 972, então devo usar 900 no MaxClients?

    
por Larry 13.07.2011 / 01:41

2 respostas

9

Primeiro, determine o PID de um dos seus processos do Apache.

Então você pode fazer algo assim:

cat /proc/PIDHERE/status | grep VmRSS

Isso produzirá o tamanho do conjunto de residentes (atual) desse processo específico, semelhante a:

VmRSS: 304456 kB

Este valor é o que parece, é o tamanho do processo residente na RAM.

Em seguida, normalize sua unidade de medida ( 4GB * 1024 * 1024 = 4,194,304 KB ). Divide:

4194304 KB / 304456 KB = 13.77 processes

Considere que você provavelmente tem outros processos em execução no seu sistema que também consomem memória e, idealmente, você deseja minimizar a troca, portanto, você provavelmente não deseja 13 Apache MaxClients configurados (usando meus números), você quer uma quantidade menor ( a seu critério).

Esta é uma estimativa grosseira; o tamanho dos processos do Apache pode aumentar com o tempo, dependendo da carga.

    
por 13.07.2011 / 03:08
4

Prever o maxClients dos cenários de teste é um ponto de partida - mas, para resolver o problema adequadamente, é necessário começar a medir como o seu aplicativo está se comportando com o tráfego real.

Supondo que o seu apache esteja sendo executado antes do fork ...

Configure um cron job para contar o número de processos httpd e a saída de 'free'. Observe que, se o servidor da Web estiver exibindo qualquer conteúdo de arquivos locais (e, em muitos casos, mesmo quando não estiver), a quantidade de memória disponível para cache / buffers terá um grande impacto no desempenho. ou seja, se você chegar ao ponto de trocar, seu desempenho na Web provavelmente será horrível!

Depois de obter alguns dados, plote-os em um gráfico e faça uma regressão de mínimos quadrados sobre ele - extrapole para encontrar o número de clientes em que você atinge seu limite de destino para uso de memória do httpd. Um ponto de partida para o destino de memória seria o menor de 80% da memória física / 80% do tamanho do conteúdo.

(observe se você tem MinSpareServers definidos para um valor muito alto, os resultados podem não ser precisos)

#!/bin/bash

LOGFILE='/var/log/httpd/memusage'
PIDS = 'ps -ef | grep httpd | grep -v grep | wc -l'
MEM = 'free | grep 'buffers/cache''
DAY = 'date '%Y-%m-%d %H:%M:%S''
echo ${DAY} ${PIDS} ${MEM} >>LOGFILE

Em um mundo ideal, você também avalia o tempo de resposta da URL no mesmo arquivo de registro, mas isso fica muito mais complexo.

    
por 13.07.2011 / 12:30