Configurando o Apache para usar vários núcleos

3

Recentemente eu comprei um servidor de 6 núcleos que está executando o Ubuntu 10.04 e o Apache. Como você configura o apache para usar todos os 6 núcleos e qual é a melhor prática para fazer isso?

É possível e, se possível, tem algo a ver com o abaixo (estas não são as minhas configurações)?

<IfModule prefork.c> 
StartServers 10 
MinSpareServers 10 
MaxSpareServers 20 
ServerLimit 1500 
MaxClients 1500 
MaxRequestsPerChild 4000 
</IfModule>

<IfModule worker.c> 
StartServers 2 
MaxClients 150 
MinSpareThreads 25 
MaxSpareThreads 75 
ThreadsPerChild 25 
MaxRequestsPerChild 0 
</IfModule> 

Felicidades

Esta é minha configuração atual

# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

# event MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_event_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>
    
por Grimlockz 13.09.2011 / 17:51

3 respostas

9

O Apache (e qualquer outro aplicativo multi-threaded) usará todos os núcleos disponíveis por padrão. Contanto que você não tenha o Apache configurado para usar menos servidores do que os núcleos, não há outra ação a ser executada.

    
por 13.09.2011 / 17:53
2

O que está sendo executado no Apache? Muitas vezes, seu limite de encadeamento será com módulos não encadeados ou código de aplicativo.

    
por 13.09.2011 / 17:57
2

Por padrão, com as configurações de estoque disponíveis na maioria das versões empacotadas do Apache, você não precisará fazer nada.

Como o Apache funciona em sistemas com vários núcleos e como você o configura é muito influenciado por qual MPM você usa. Um dos MPM mais comuns é o prefork.

O Prefork basicamente fornece um processo separado para cada solicitação. Os processos podem ser facilmente distribuídos pelo sistema operacional para usar todos os núcleos.

O MPM worker na verdade habilita a operação multi-threaded, mas não é compatível com alguns módulos do Apache que não são thread-safe (isto é, PHP).

Veja esta página Recursos Principais e Módulos de Multi-Processamento , e siga os links e leia sobre os vários módulos disponíveis.

    
por 13.09.2011 / 18:32