Pergunta sobre o uso do Apache e da memória

2

Estou curioso sobre como o Apache manipula como a memória é alocada para cada um dos processos que ela cria. Atualmente estou executando um servidor Debian.

Neste momento, o meu servidor tem 8GB de memória e está ativo há cerca de 7 dias. No momento, isso mostra que meu servidor tem cerca de 50 MB de memória disponível.

Quando executo "top -u www-data", vejo todos os processos do Apache atualmente em execução. Na coluna VIRT, vejo que cada processo está em 354m e a coluna RES varia entre 9254 e 60m.

O que eu acho estranho é que quando eu reinicio o Apache, os IDs do processo mudam, mas eles automaticamente voltam a ocupar a mesma quantidade de memória.

Basicamente, minha preocupação é que o Apache esteja ocupando muita memória. Agora eu tenho MaxKeepAliveRequests definido como 100 e KeepAliveTimeout definido como 3. Eu também tenho as seguintes diretrizes definidas:

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   200
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

Agora, quando eu acesso o servidor, não vejo nenhum problema de desempenho. A carga média geralmente permanece muito longa, parece que eu tenho uma quantidade muito pequena de memória disponível. Não vai trocar nada (760k é o mais alto que já vi).

Eu apenas pareço estar preocupado que o Apache esteja tendo muita memória. Se isso é normal e não fará com que o servidor se mate, eu posso aprender a viver com isso. Isso simplesmente não parece certo.

Qualquer entrada seria muito apreciada. Obrigado

Josh Pennington

    
por Josh Pennington 16.08.2010 / 22:30

2 respostas

2

O tamanho da VIRT não é muito útil. Inclui todos os tipos de páginas de memória mapeadas que não estão realmente em uso. Olhe para RES. O RES menos SHR está mais próximo do seu tamanho real de memória por processo.

O RES de 60m em alguns processos é um pouco maior do que eu esperava. Você está usando algum módulo (mod_perl, mod_php, mod_python) que possa alocar muita memória?

    
por 16.08.2010 / 23:03
0

Você sabe qual módulo está usando? mpm_worker_module ou mpm_prefork_module ? Com qualquer um deles, você pode reduzir o número StartServers e MinSpareServers / MinSpareThreads . Isso reduzirá a quantidade inicial de recursos que o Apache consome na inicialização. À medida que o tráfego aumenta, o Apache continuará a gerar / extrair processos / threads adicionais para lidar com a carga e os recursos aumentarão.

Além disso, ignore quanto de memória "livre" seu servidor possui. Se o Linux encontrar memória livre, ele será usado para armazenar dados em cache de seus discos, bem como atuar como buffers. Se você tiver uma grande quantidade de dados em 'Em cache', seu sistema estará funcionando bem. Se precisar de mais memória para processos reais, você descobrirá que o Linux irá limpar parte da memória do cache e entregá-la ao processo que precisa.

    
por 17.08.2010 / 16:57

Tags