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.
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>
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 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.
Tags multi-core linux apache-2.2