Pular para o conteúdo principal

Otimizando o Servidor Web Apache



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  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.


Comentários

Postagens mais visitadas deste blog

VISÃO GLOBAL - sobre IDoc O IDoc é um objeto SAP que transporta dados de uma transação comercial de um sistema para outro na forma de mensagem eletrônica.  IDoc é um acrônimo para  I  ntermediate  Doc  ument.  O objetivo de um IDoc é transferir dados ou informações do SAP para outros sistemas e vice-versa.  A transferência do SAP para o sistema não SAP é feita via subsistemas EDI (Electronic Data Interchange), enquanto para a transferência entre dois sistemas SAP, o ALE é usado. O IDoc pode ser acionado no sistema SAP ou no subsistema EDI. Isso depende da direção na qual o IDoc é enviado e é chamado como IDoc de entrada e IDoc de saída de acordo.  No caso de fluxo de saída, o IDoc é acionado no SAP por meio do controle de mensagens do documento, que é então enviado ao subsistema EDI. EDI converte os dados do IDoc em XML ou formato equivalente e, em seguida, envia os dados para o sistema parceiro através da Internet. Para o fluxo de entrad...

Saída de mercadorias (MIGO_GI)

Saída Logística - Administração de Materiais - Administração de Estoques - Movimento mercadoria (MIGO) - Saída de mercadorias (MIGO_GI) - Saída de mercadorias (MB1A) Uma saída de mercadoria (SM) é a retirada de material do estoque, seja para consumo ou expedição para um cliente. Tipo de movimento - 201 – Consumo de mercadoria para centro de custos vindo do depósito - 221 – Consumo de mercadoria para projeto vindo do depósito - 261 – Consumo para ordem vindo do depósito - 281 – Consumo para diagrama de rede vindo do depósito - 541 – Subcontratação: remessa dos componentes de livre utilizável para fornecedor - 551 – Retirada para sucata de livre utilizável As opções da transação MIGO_GI são: Saída e Estorno. Campos a serem preenchidos para Saída de Mercadoria: - Selecionar “Saída de mercadorias” - Entrar com os dados dos itens a serem retirados do depósito: o Material o Quantidade o Centro o Depósito o Centro de Custo (obrigatório dependendo do tipo de saída) Campos...

Veja como solucionar o erro 'Não permite retransmissão' em iPhones, iPads e iPods

Você tentou enviar e-mails do seu UOL Mail por um iPhone, iPad ou iPod, mas recebeu a mensagem  O destinatário foi rejeitado pelo servidor porque ele não permite retransmissão ? Isso indica que existe algum erro na configuração do SMTP. Essa configuração junto com a configuração IMAP são os responsáveis por receber e enviar e-mails usando o gerenciador de contas dos aparelhos da Apple.  Clique aqui e verifique o passo a passo ilustrado para fazer essas configurações .  Se você já configurou seu aparelho, mas o erro persiste, é necessário verificar alguns dados.  Um erro comum, por exemplo, é esquecer de corrigir o campo  Nome do Host  que contém o link SMTP. É necessário colocar a letra "s" após o smtp, ficando:  smtps.uol.com.br . Vá em  Ajuste s, selecione  Mail, Contatos, Calendário . Selecione a conta do UOL que você configurou e clique em  Conta . Verifique se o Servidor de Correio de Saída está com o link  smtps.uol...