Otimizando o Servidor Web Apache
Por
experiencia própria vou tentar passar aqui algumas dicas para evitar
que isto aconteça, seja você um web master ou um administrador de
redes.
Quando
um sistema é desenvolvido, um dos requisitos do projetado é
verificar a plataforma e hardware no qual este sistema sera
executado, podendo prever se servidores já ativos suportarão a
aplicação desenvolvida ou se será necessária a contratação de
uma máquina mais robusta.
Mas
o que fazer se mesmo após toda uma análise de requisitos e após
algum tempo o servidor começar a dar TOP(s) muito altos, chegando
até a travar o sistema, tornando o acesso remoto impossível porque
de uma hora para outra muitas requisições chegaram ao servidor
Apache e muitas requisições a base de dados foram executadas,
deixando o MySQL totalmente doido.
Não
existe uma forma genérica para se configurar serviços web,
principalmente um servidor Web Apache apara responder a requisições
em excesso, porem podemos chegar a um consenso ou uma luz no fim do
túnel para agradarmos a Gregos e Troianos de como configura-lo a fim
de otimizar os serviços prestados.
A
ultima frase não é um tanto quanto animadora, mas, devo lembrar que
cada tipo de serviço disposto, seja ele na web ou em uma intranet
consome recursos de formas diferentes. Como uma aplicação que roda
em uma loja de calçados por exemplo, a disponibilidade do
banco de dados, impressora, cabeamento, sistema operacional, hardware
e outros recursos que fogem do escopo desta postagem são fatores que
influenciam um serviço.
E
claro, não podemos esquecer do mais problemático de todos, o fator
“humano“.
Portanto
após cuidarmos de todos estes detalhes, podemos partir para o
principal, o Apache.
Primeiramente
você deve analisar o tráfego de requisições que chegam ao
servidor Apache, para se ter uma estatística de consumo de memória
que cada requisição do Apache esta consumindo e o tempo que cada
requisição está prendendo a instância criada no sistema.
Complicado
não é?
Mas
digamos que após executar o comando “top” no linux:
1
|
servidor:
~# top
|
Você
reparou que a média de consumo de mémória de uma instancia do
apache é de 6MB, se existir 500 processos em execução, basta
multiplicar o valor da memória pela quantidade de processos para
achar o resultado de 3GB de Memória, isto mesmo, 3GB de memória
serão necessários para dar conta de todos os processos. Lembrando
ainda que você deve reservar memória para o sistema operacional e
as outras aplicações, incluindo o próprio servidor Apache que
consome em torno de 100MB, fazendo com que todos fiquem em total
harmonia.
Uma
diretiva que se pode utilizar, porem em certas circunstancias pode
trazer mais problemas do que solução, em caso de não haver
possibilidade de aumentar recursos de hardware no servidor web,
podemos alterar a propriedadeMaxClients do
arquivo de configuração do apache.
MaxClients
500
Esta
propriedade vai limitar o máximo número de processos do apache em
execução no sistema operacional, fazendo assim com que a capacidade
de memória existente não estoure. Porem fazer isso com o servidor
tendo mais requisições do que o limite estipulado, fará com que os
usuário excedentes fiquem esperando pela liberação de um processo,
para poder carregar as páginas web tão esperadas.
Claro
que se os recursos forem escassos, não dá para fazer milagre.
Uma
forma de avaliar melhor a configuração efetuada, é utilizar o
comando “ab”:
1
|
# ab -n 500 -c 100 http://www.meu-site.com.br
|
O
comando “ab” auxilia no teste e verificação de requisições ao
sistema web Apache, fazendo com que se tenha um ideia de como se
comportará o servidor web com as requisições as página de sites
existentes. O comando “ab”
ouApache
Bench não
simula a real manipulação de requisições efetuadas por um usuário
real, mas requisita o servidor muitas vezes.
Outra
dica é ativar o KeepAlive no
arquivo de configurações do Apache, fazendo com que várias
requisições sejam efetuadas atravês de uma mesma conexão, não
tendo assim, fazer com que não seje preciso encerrar um socket e
abri-lo novamente.
Arquivos
de configuração do Apache (apache2.conf)
1
2 3 4 5 |
#
# KeepAlive: Whether or not to allow persistent connections (more than # one request per connection). Set to "Off" to deactivate. # KeepAlive On |
Outra
propriedade é o MaxKeepAliveRequests que que indica quantas
requisições serão tratadas pelo KeepAlive.
1
2 3 4 5 6 |
#
# MaxKeepAliveRequests: The maximum number of requests to allow # during a persistent connection. Set to 0 to allow an unlimited amount. # We recommend you leave this number high, for maximum performance. # MaxKeepAliveRequests 100 |
A
próxima propriedade deve ser atribuido um valor de acordo com o tipo
de sistema que roda sobre o servidor web Apache, Mas não atribua um
valor muito alto, pois fara com que a próxima requisição fique
muito tempo na file aguardando para ser tratada.
1
2 3 4 5 |
#
# KeepAliveTimeout: Number of seconds to wait for the next request from the # same client on the same connection. # KeepAliveTimeout 15 |
As
configurações abaixo indicarão ao Apache como se comportar com a
inicialização, execução com requisições e cargar de processos.
1
2 3 4 5 6 |
#
prefork MPM
# StartServers: number of server processes to start # MinSpareServers: minimum number of server processes which are kept spare # MaxSpareServers: maximum number of server processes which are kept spare # MaxClients: maximum number of server processes allowed to start # MaxRequestsPerChild: maximum number of requests a server process serves |
1
2 3 4 5 |
StartServers
5
MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 |
A
propriedade StartServers indica
o número de processos que ficará ativo na inicialização do
servidor web Apache ficando carregado em memória, esperando por uma
requisição.
MinSpareServers são
instâncias reservadas pelo Apache para o caso de sofrer carga
elevada de requisições, não tendo assim que criar novas instâncias
para tratar as requisições que chegaram ao servidor, não fazendo
com que essas requisições fiquem na fila de espera. As
Opções MinSpareServers e MaxSpareServers determinam
o mínimo e o máximo de reservas que deve ficar disponível para
responder as requisições solicitadas
MaxClients A
directiva MaxClients define número máximo de solicitações
simultâneas que serão tratados pelo servidor web apache. Quaisquer
tentativas de conexão acima do limite definido será colocado na
fila até um processo filho seja liberado e então atender a tal
requisição.
MaxRequestsPerChild Limita
o número de pedidos que cada processo irá lidar durante a sua vida.
htaccess – a espada de dois gumes
Tome
cuidado com o htaccess, pois tal recurso é incrivel do ponto de
vista funcional, podendo efetuar diversas interações nas
requisições que chegam ao servidor web, porem, este recurso é
desencorajado tendo como motivo o sobrecarregamento do servidor com
alterações de desvio do fluxo natural. Procure evitar utilizar este
recurso e, se for necessário a sua utilização tenha cautela.
Módulos
Os
módulos do apache o torna um servidor versátil e robusto, porem,
tenha certeza que os módulos carregados são realmente necessários,
pois do contrário estará carregando recurso extra e o apache rodaŕa
mais pesado, consumindo mais memória do que o esperado.
Modular ou Compilado
Já
ouvi muito sobre, “… instale o apache 1.3 … , ” … instale o
apache 2.0, pois é melhor que o apache 2.2 …”, “… compila
ele …”. Na verdade a respeito do versionamento, devemos e isto é
incentivado na própria página do apache, a utilizar sempre d ultima
versão do software a fim de obter todas as modificações ocorridas
até o momento, como correções de vulnerabilidades e bugs. Claro
que se você não pode efetuar a atualização do teu servidor web
Apache para a ultima versão, terá que utilizar a versão que
corresponde a sua necessidade, porem se você fará uma instalação
nova do sistema, recomendo instalar a ultima versão disponível.
Já
entre ser compilado, a grande diferença está em o apache já ter
agregado a ele os módulos de necessidade do utilizador, como
mod_rewrite, mod_ssl, mod_jk e entre outros, consumindo assim menos
memória pois não é necessário carregar tal recurso. Mas o modular
torna o serviço de manipulação e configuração do servidor, algo
menos árduo facilitando a vida do administrador de sistemas tendo é
claro como lado ruim o de consumir um pouco mais de memória para
carregar os recursos extras.
Então
optar entre o modular e o compilado é uma questão de necessidade e
praticidade na utilização de recursos de hardware e gerenciamento
do sistema, o que apenar o utilizador obterá tal resposta.
Obvio
que toda a informação citada acima não servirá de nada se, você
não coletar dados úteis sobre o teu servidor web, sobre as
requisições e consumo que o teu site gera. Tendo isto em mente,
devo ainda lembrar que o apache fornece uma infinidade de opções o
que tornaria impossível agregar tal informação em apenas uma
postagem.
Mas
vai a dica, a documentação
do apache é
muito rica o que torna gratificante buscar informações sobre as
configurações e recursos que o apache disponibiliza, abrindo assim
o leque de conhecimento sobre este incrível servidor.
Para
mais informações, comentem e enviem perguntas, pois se estiver ao
meu alcance, terei o prazer em disponibilizar tal conhecimento.
Até
a próxima.