Apache
Performance
Tuning

21.fev.2014

Marcos Sungaila – marcos@savant.com.br

CC Attribution-ShareAlike 3.0 Unported Lic...
Agenda
●

Warning

●

Configuração básica

●

Persistent
connections

RAM

●

.htaccess

Módulos padrão

●

SymLinks

●

m...
Warning

"Premature optimization
is the root of all evil."
Donald Knuth

21.fev.2014

Marcos Sungaila – marcos@savant.com....
Configuração básica
●

●

●

A configuração padrão do Apache é bem
versátil
Usando servidores standard, o Apache pode
aten...
Otimização
●

Como medir a performance do Apache?
–
–

httperf

–
●

Apache HTTP server bench marking tool
The Grinder, a ...
Otimização

●

21.fev.2014

Por onde começar?

Marcos Sungaila – marcos@savant.com.br

CC Attribution-ShareAlike 3.0 Unpor...
RAM
●

Siga aquele ditado que diz:
Quanto mais, melhor!

●

●

●

Se possível tenha o máximo de memória que o
servidor, o ...
Módulos padrão
●

●

●

A carga de módulos usa mais memória e ativa
sequências de verificação adicionais
Inclui rotinas a ...
Módulos padrão
●

Desative módulos desnecessários

●

Alguns módulos para verificar se você precisa deles:
–

authn_alias_...
Módulos padrão
●

●

O principal objetivo em desativar módulos não
é liberar memória mas sim reduzir o número de
rotinas e...
mod_mem_cache
●

●

É útil para criar cache de conteúdo gerado
localmente ou quando o apache atua como um
proxy reverso
Es...
mod_disk_cache
●

●

●

Também é usado para criar cache de conteúdo
gerado localmente ou quando o apache atua
como um prox...
mod_disk_cache
●

●

●

●

Quantidade de pastas para cache pode ser
configurada com CacheDirLength e
CacheDirLevels
Cuidad...
mod_disk_cache
●

Como configurar mod_disk_cache
LoadModule disk_cache_module modules/mod_disk_cache.so
<IfModule mod_cach...
mod_disk_cache
●

Como saber se a página foi servida a partir do
cache ou processada?
LogFormat "%h %l %u %t "%r" %>s %b
"...
Logs
●
●

●

●

Uso intensivo de I/O
Deve usar um disco separado do disco do
conteúdo do apache
Preferencialmente discos S...
Persistent connections
●

Vantagens
–

–
●

É mais eficiente manter uma conexão ativa para
enviar um segundo arquivo
Atend...
Persistent connections
●

Opções de configuração
LoadModule headers_module modules/mod_headers.so
KeepAlive on
MaxKeepAliv...
.htaccess
●

●

Usado para tornar mais flexível a configuração
de sites no Apache
Deve ser habilitado no httpd.conf pela t...
.htaccess
●

Com esta configuração
DocumentRoot /var/www/html
<Directory />
AllowOverride all
</Directory>

●

Ao acessar ...
SymLinks
●

Há duas opções para permitir o uso de links
simbólicos
FollowSymLinks
SymLinksIfOwnerMatch

●

A segunda opção...
SymLinks
●

Com esta configuração
DocumentRoot /vaw/www/html
<Directory />
Options SymLinksIfOwnerMatch
</Directory>

●

A...
Para os desenvolvedores

21.fev.2014

Marcos Sungaila – marcos@savant.com.br

CC Attribution-ShareAlike 3.0 Unported Licen...
Carregar js depois da página
●

●

●

●

Não use async, defer ou posicione os scripts no
final da página: isso não funcion...
Carregar js depois da página
●

Exemplo prático
<script type="text/javascript">
function downloadJSAtOnload() {
var elemen...
Outras otimizações
●

Apache Extended Status

●

Swapiness

●

Buffer Size

●

Max Open Files

●

PHP Safe Mode

●

etc......
Perguntas?

21.fev.2014

Marcos Sungaila – marcos@savant.com.br

CC Attribution-ShareAlike 3.0 Unported License

27
Muito Obrigado

Marcos Sungaila
marcos@savant.com.br

21.fev.2014

Marcos Sungaila – marcos@savant.com.br

CC Attribution-...
Upcoming SlideShare
Loading in...5
×

Apache Performance Tuning

591

Published on

Dicas e truques para melhorar a performance do Apache com pequenas configurações que podem fazer uma grande diferença.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
591
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
18
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Apache Performance Tuning

  1. 1. Apache Performance Tuning 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 1
  2. 2. Agenda ● Warning ● Configuração básica ● Persistent connections RAM ● .htaccess Módulos padrão ● SymLinks ● mod_mem_cache ● ● mod_disk_cache ● Logs ● ● 21.fev.2014 Carregar javascripts depois da página Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 2
  3. 3. Warning "Premature optimization is the root of all evil." Donald Knuth 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 3
  4. 4. Configuração básica ● ● ● A configuração padrão do Apache é bem versátil Usando servidores standard, o Apache pode atender a alguns milhares de conexões por dia sem otimizações Essa configuração pode ser melhorada ampliando ou reduzindo os recursos disponíveis por meio de seus módulos 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 4
  5. 5. Otimização ● Como medir a performance do Apache? – – httperf – ● Apache HTTP server bench marking tool The Grinder, a Java Load Testing Framework Não há outra forma de medir essa performance? – 21.fev.2014 A mais importante métrica que pode ser verificada é a percepção do usuário Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 5
  6. 6. Otimização ● 21.fev.2014 Por onde começar? Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 6
  7. 7. RAM ● Siga aquele ditado que diz: Quanto mais, melhor! ● ● ● Se possível tenha o máximo de memória que o servidor, o sistema operacional e seu bolso permitirem Mais memória permite um maior número de processos ou threads Maior número de requests simultâneos 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 7
  8. 8. Módulos padrão ● ● ● A carga de módulos usa mais memória e ativa sequências de verificação adicionais Inclui rotinas a serem executadas em todas as chamadas Vários módulos que vêm configurados por padrão só são usados em casos específicos 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 8
  9. 9. Módulos padrão ● Desative módulos desnecessários ● Alguns módulos para verificar se você precisa deles: – authn_alias_module – authn_anon_module – authn_dbm_module – authnz_ldap_module – authz_dbm_module – authz_owner_module – ext_filter_module – file_cache_module – info_module – ldap_module – mem_cache_module – status_module – speling_module – usertrack_module – proxy_module – proxy_balancer_module – proxy_ftp_module – proxy_http_module – proxy_ajp_module – proxy_connect_module 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 9
  10. 10. Módulos padrão ● ● O principal objetivo em desativar módulos não é liberar memória mas sim reduzir o número de rotinas executadas em cada request A redução no consumo de memória acontece como um bônus 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 10
  11. 11. mod_mem_cache ● ● É útil para criar cache de conteúdo gerado localmente ou quando o apache atua como um proxy reverso Este módulo cria um cache independente por processo – não compartilhável entre processos 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 11
  12. 12. mod_disk_cache ● ● ● Também é usado para criar cache de conteúdo gerado localmente ou quando o apache atua como um proxy reverso O cache é criado em uma pasta especificada e pode ser acessado por todos os processos/ threads do apache Ao usar mod_disk_cache configure um disco separado, de alta performance – SSD se possível – , como cache 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 12
  13. 13. mod_disk_cache ● ● ● ● Quantidade de pastas para cache pode ser configurada com CacheDirLength e CacheDirLevels Cuidado com CacheDirLength para não criar poucas pastas ou uma quantidade muito grande Prefira uma estrutura com CacheDirLevels=1 para reduzir o tempo de limpeza do cache Execute o daemon htcacheclean para evitar o acumulo desnecessário de arquivos sem uso 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 13
  14. 14. mod_disk_cache ● Como configurar mod_disk_cache LoadModule disk_cache_module modules/mod_disk_cache.so <IfModule mod_cache.c> <IfModule mod_disk_cache.c> CacheEnable disk / CacheIgnoreHeaders Set-Cookie CacheRoot "/var/cache/httpd_cache" CacheDirLength 2 CacheDirLevels 1 </IfModule> <IfModule> ● Habilitar o daemon htcacheclean htcacheclean -d30 -n -t -p /var/cache/httpd_cache -l 512M 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 14
  15. 15. mod_disk_cache ● Como saber se a página foi servida a partir do cache ou processada? LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" "%{Age}o"" combined 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 15
  16. 16. Logs ● ● ● ● Uso intensivo de I/O Deve usar um disco separado do disco do conteúdo do apache Preferencialmente discos SAS – não precisa ser SSD Considere o uso do log do sistema 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 16
  17. 17. Persistent connections ● Vantagens – – ● É mais eficiente manter uma conexão ativa para enviar um segundo arquivo Atender a mais de um request por conexão Desvantagens – Pode prejudicar em sites onde só há solicitações de um único arquivo – Mantém uma conexão ativa por mais tempo 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 17
  18. 18. Persistent connections ● Opções de configuração LoadModule headers_module modules/mod_headers.so KeepAlive on MaxKeepAliveRequests 100 KeepAliveTimeout 15 <ifModule mod_headers.c> Header set Connection keep-alive </ifModule> 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 18
  19. 19. .htaccess ● ● Usado para tornar mais flexível a configuração de sites no Apache Deve ser habilitado no httpd.conf pela tag AllowOverride ● A tag AllowOverRide força o Apache a fazer varreduras em todas as pastas a partir de / à procura de arquivos .htaccess 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 19
  20. 20. .htaccess ● Com esta configuração DocumentRoot /var/www/html <Directory /> AllowOverride all </Directory> ● Ao acessar este site, o Apache é forçado a procurar por .htaccess em: /.htaccess /var/.htaccess /var/www/.htaccess /var/www/html/.htaccess 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 20
  21. 21. SymLinks ● Há duas opções para permitir o uso de links simbólicos FollowSymLinks SymLinksIfOwnerMatch ● A segunda opção é mais segura porém, do ponto de vista de performance, é extremamente onerosa. 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 21
  22. 22. SymLinks ● Com esta configuração DocumentRoot /vaw/www/html <Directory /> Options SymLinksIfOwnerMatch </Directory> ● Ao acessar este site, o Apache é forçado a executar uma função lstat() em: /var /var/www /var/www/html /var/www/html/index.html 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 22
  23. 23. Para os desenvolvedores 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 23
  24. 24. Carregar js depois da página ● ● ● ● Não use async, defer ou posicione os scripts no final da página: isso não funciona Javascripts que não estão envolvidos na exibição inicial da página só devem ser carregados depois da página completa Coloque em um arquivo separado, scripts que monitoram clicks, posição de mouse e coisas assim Use o código mostrado a seguir ao final da sua página, antes da tag </body> 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 24
  25. 25. Carregar js depois da página ● Exemplo prático <script type="text/javascript"> function downloadJSAtOnload() { var element = document.createElement("script"); element.src = "scripts.js"; document.body.appendChild(element); } if (window.addEventListener) window.addEventListener("load", downloadJSAtOnload, false); else if (window.attachEvent) window.attachEvent("onload", downloadJSAtOnload); else window.onload = downloadJSAtOnload; </script> 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 25
  26. 26. Outras otimizações ● Apache Extended Status ● Swapiness ● Buffer Size ● Max Open Files ● PHP Safe Mode ● etc... 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 26
  27. 27. Perguntas? 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 27
  28. 28. Muito Obrigado Marcos Sungaila marcos@savant.com.br 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 28
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×