Limite de memória em PHP + Apache + Windows 32 bits?

2

Estou pensando em usar o Apache de 32 bits para uma instalação do Moodle em um servidor Windows 2008 R2 de 64 bits / 16 GB. Como a memória disponível afeta o número de usuários simultâneos que podem ser atendidos, fiquei me perguntando como o limite de memória de 2 GB nos processos do Windows de 32 bits afeta o Apache + PHP.

É um limite coletivo para todo o servidor ou é aplicado separadamente para cada processo / segmento filho do Apache?

Se for separado, quantos desses filhos são iniciados no Windows? Um por solicitação? Um por núcleo do processador? Algo no meio? Isso é algo configurável?

    
por thkala 06.09.2012 / 16:13

2 respostas

0

Isenção de responsabilidade: não sou um administrador do Windows. Acredito que a configuração mais comum como esta em relação ao Apache 2 é usar o Winnt Multi Processing Module (MPM), com um tamanho de conjunto de encadeamentos configurável (o padrão é 250 ou mais). Isso significa que você terá um único processo com muitos encadeamentos, de modo que o processo será aquele sujeito à limitação do 2G.

Uma coisa boa sobre o Apache2 é que ele suporta diferentes esquemas de MPM para que você possa escolher o que se encaixa melhor. Aqui, é provável (ou até mesmo tem que ser - não tenho certeza) o winnt MPM.

Espero que isso ajude. --Matt

    
por 06.09.2012 / 16:53
1

Primeiro de tudo, se você estiver fazendo a pergunta, talvez queira dar uma olhada no limites de memória para as várias versões do Windows . Gerar vários processos do Apache não fará muito bem se o sistema operacional limitar você a 2 ou 4 GB de RAM. Além disso, observe que o limite de memória por processo é variável com base no próprio aplicativo.

Em segundo lugar, o limite de 2 GB por processo aplica-se a cada processo. Qualquer processo pode ter até 2 GB de memória alocada para ele, independentemente de ser ou não um processo filho de outra coisa. Processos multi-threaded ainda são processos, então não há passo a passo a limitação dessa maneira.

Por fim, parece que você não entende como os processos do Apache (ou do Windows?) funcionam. Não há uma configuração global para launch [x] processes of [y] application ou [x] processes of [y] application per [z] cores e você certamente não obtém um novo processo do Apache para cada http , portanto, essa parte da questão é um pouco ... irrespondível. O número de processos que um aplicativo lança é definido pelo aplicativo (e pelo usuário, até certo ponto). Por exemplo, cada guia no IE é seu próprio processo, mas cada guia no Firefox não é.

Sugiro, no entanto, que evitar as limitações de memória iniciando várias instâncias do mesmo processo provavelmente não é uma boa idéia, e você deve obter uma versão do Windows que suporte nativamente o seu aplicativo com tanta memória quanto ele realmente precisa (ou pode lidar com). Considere o que vai acontecer quando você (ou outra pessoa) tiver que solucionar um problema e entrar em um servidor Web executando 32 instâncias Apache para "contornar" os 2 GB por limite de processo e usar a limitação máxima permitida de 64 GB do sistema operacional RAM. Alguém vai ser assassinado.

    
por 06.09.2012 / 18:23