Pergunta

No momento, estamos usando Apache 2.2.3 e Tomcat 5 (embutido no JBoss 4.2.2) usando mod_proxy_jk como o conector.

Alguém pode lançar alguma luz sobre a maneira correta de calcular / configure os valores abaixo (bem como qualquer outra coisa que possa ser relevante). Tanto o Apache e Tomcat estão sendo executados em máquinas separadas e têm grandes quantidades de RAM (4 GB cada).

porções server.xml relevantes:

<Connector port="8009"
           address="${jboss.bind.address}"
           protocol="AJP/1.3"
           emptySessionPath="true"
           enableLookups="false"
           redirectPort="8443"
           maxThreads="320"
           connectionTimeout="45000"
    />

porções httpd.conf relevantes:

<IfModule prefork.c>
  StartServers       8
  MinSpareServers    5
  MaxSpareServers   20
  ServerLimit      256
  MaxClients       256
  MaxRequestsPerChild  0
</IfModule>
Foi útil?

Solução

Você deve considerar a carga de trabalho dos servidores pode ter.

O fator mais importante pode ser o número de clientes conectados simultaneamente em horários de pico. Tentar determinar isso e ajustar suas configurações de uma forma onde:

  • existem suficientes threads de processamento em ambos Apache e Tomcat que eles não precisam de novos tópicos de desova quando o servidor está muito carregado
  • não existem muito mais processamento de threads nos servidores do que o necessário, pois iria desperdiçar recursos.

Com este tipo de configuração, você pode minimizar a sobrecarga de manutenção interna dos servidores, que poderia ajudar muito, especialmente quando a sua carga é esporádica.

Por exemplo, considere um aplicativo onde você tem ~ 300 novos pedidos / segundo. Cada pedido requer, em média, 2,5 segundos para servir. Isso significa que a qualquer momento você tem ~ 750 pedidos que precisam ser tratadas simultaneamente. Nessa situação, você provavelmente vai querer ajustar seus servidores para que eles tenham ~ 750 threads de processamento na inicialização e você pode querer adicionar algo como ~ 1000 threads de processamento no máximo para lidar com cargas extremamente elevadas.

Considere também para exatamente o que você precisar de um thread para. No exemplo anterior cada pedido foi independente das outras, não houve sessão de rastreamento usado. Em um cenário mais "web-ish" que você pode ter usuários conectado para o seu site, e dependendo do seu software utilizado, Apache e / ou Tomcat pode precisar usar o mesmo fio para atender as solicitações que vêm em uma sessão. Neste caso, você pode precisar de mais threads. No entanto, como eu sei Tomcat, pelo menos, você não vai realmente precisa considerar isso como ele funciona com pools de threads internamente de qualquer maneira.

Outras dicas

MaxClients

Esta é a tampa fundamental de conexões de cliente paralelos seu apache deve lidar ao mesmo tempo.

Com prefork, apenas uma solicitação pode ser tratado por processo. Por isso todo o apache pode processar , no máximo, $ MaxClients pedidos no tempo que leva para lidar com um única pedido. Claro, isso máximo ideal só pode ser alcançado se o aplicativo precisa de menos de 1 / $ recursos MaxClients por pedido.

Se, por exemplo, o aplicativo leva um segundo de cpu-tempo para responder a uma única solicitação, definindo MaxClients a quatro irá limitar a sua taxa de transferência para quatro pedidos por segundo: cada solicitação usa uma conexão apache apache e só vai lidar com quatro de uma vez. Mas se o servidor tem apenas duas CPUs, nem mesmo isso pode ser alcançado, porque cada relógio de parede segundo tem apenas dois segundos de CPU, mas os pedidos precisaria de quatro segundos de CPU.

MinSpareServers

Isto diz Apache quantos processos ociosos deve pendurar ao redor. Quanto maior este número o apache carga mais estourar pode engolir antes de precisar processos extra de desova, que é caro e, portanto, diminui a solicitação atual.

O correto ajuste desta depende da sua carga de trabalho. Se você tiver páginas com muitos sub-pedidos (imagens, iframe, JavaScript, CSS), em seguida, bater uma única página pode utilizar-se muitos processos mais para um curto período de tempo.

MaxSpareServers

Ter muitos processos apache não utilizados pendurados em torno de apenas memória resíduos, assim apache usa o número MaxSpareServers para limitar a quantidade de processos de reposição está segurando em reserva para rajadas de pedidos.

MaxRequestsPerChild

Isso limita o número de solicitações de um único processo irá lidar ao longo de sua vida. Se você está muito preocupado com a estabilidade, você deve colocar um limite real aqui para continuamente reciclar os processos do Apache para evitar vazamentos de recursos de afetar o sistema.

StartServers

Esta é apenas a quantidade de processos do Apache é iniciado por padrão. Defina esta opção para a quantidade usual de correr apache processos para reduzir o tempo de aquecimento do seu sistema. Mesmo se você ignorar essa configuração, apache irá utilizar os valores / MaxSpareServers min- para gerar novos processos, conforme necessário.

Mais informações

Veja também a documentação para apache é multi-processamento módulos .

As configurações padrão são geralmente pontos de partida decente para ver o que as aplicações que realmente está acontecendo com a necessidade. Eu não sei quanto tráfego você está esperando, então adivinhar as MaxThreads, MaxClients e MaxServers é um pouco difícil. Posso dizer-lhe que a maioria dos clientes que lidar com (trabalho para um host Linux web, que lida principalmente com clientes que executam aplicativos Java no Tomcat) usar as configurações padrão para algum tempo sem muitos ajustes necessários.

Se você não está esperando muito tráfego, então essas configurações sendo "muito alto" realmente não deve afetar você muito também. Apache não vai alocar recursos para toda a 256 potenciais clientes, a menos que se torne necessário. O mesmo vale para Tomcat também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top