Otimizando o Servidor Web Apache
Autor: Vinicius B. | Publicado: 2011-08-20T06:11:00-07:00

Imagine o seu domínio saindo do ar  porque a máquina no qual o site está hospedado não possui memória ou  processador suficiente para processar todas as requisições que chegam  até ela, ou isto já aconteceu, ou está acontecendo com você neste exato  instante . Isto muito é mal não é ? 
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&nbsp; 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:
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 propriedade MaxClients do arquivo de configuração do apache.MaxClients 500Esta 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”:



# 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” ou Apache 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
5StartServers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 5
MinSpareServers &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; 5
MaxSpareServers &nbsp; &nbsp;&nbsp; &nbsp; 10
MaxClients &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; 150
MaxRequestsPerChild &nbsp; 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.
&nbsp;htaccess – a espada de dois gumesTome 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.
&nbsp;MódulosOs 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.
&nbsp;Modular ou CompiladoJá 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.