SlideShare a Scribd company logo
1 of 28
Download to read offline
Apache
Performance
Tuning

21.fev.2014

Marcos Sungaila – marcos@savant.com.br

CC Attribution-ShareAlike 3.0 Unported License

1
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
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
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
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
Otimização

●

21.fev.2014

Por onde começar?

Marcos Sungaila – marcos@savant.com.br

CC Attribution-ShareAlike 3.0 Unported License

6
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
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
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
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
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
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
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
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
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
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
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
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
.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
.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
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
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
Para os desenvolvedores

21.fev.2014

Marcos Sungaila – marcos@savant.com.br

CC Attribution-ShareAlike 3.0 Unported License

23
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
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
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
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-ShareAlike 3.0 Unported License

28

More Related Content

Viewers also liked

Addressing Challenges In App Security
Addressing Challenges In App SecurityAddressing Challenges In App Security
Addressing Challenges In App SecurityAung Khant
 
Setting Up Security on Apache
Setting Up Security on ApacheSetting Up Security on Apache
Setting Up Security on Apacheelliando dias
 
Hardening Apache Web Server by Aswin
Hardening Apache Web Server by AswinHardening Apache Web Server by Aswin
Hardening Apache Web Server by AswinAgate Studio
 
Sicherheit von Webanwendungen
Sicherheit von WebanwendungenSicherheit von Webanwendungen
Sicherheit von Webanwendungenthomasgemperle
 
Domino HTTP Security - Neuerungen
Domino HTTP Security - NeuerungenDomino HTTP Security - Neuerungen
Domino HTTP Security - NeuerungenBelsoft
 
Fragmentation in mobile design: fact or fiction
Fragmentation in mobile design: fact or fictionFragmentation in mobile design: fact or fiction
Fragmentation in mobile design: fact or fictionBelen Barros Pena
 

Viewers also liked (6)

Addressing Challenges In App Security
Addressing Challenges In App SecurityAddressing Challenges In App Security
Addressing Challenges In App Security
 
Setting Up Security on Apache
Setting Up Security on ApacheSetting Up Security on Apache
Setting Up Security on Apache
 
Hardening Apache Web Server by Aswin
Hardening Apache Web Server by AswinHardening Apache Web Server by Aswin
Hardening Apache Web Server by Aswin
 
Sicherheit von Webanwendungen
Sicherheit von WebanwendungenSicherheit von Webanwendungen
Sicherheit von Webanwendungen
 
Domino HTTP Security - Neuerungen
Domino HTTP Security - NeuerungenDomino HTTP Security - Neuerungen
Domino HTTP Security - Neuerungen
 
Fragmentation in mobile design: fact or fiction
Fragmentation in mobile design: fact or fictionFragmentation in mobile design: fact or fiction
Fragmentation in mobile design: fact or fiction
 

Similar to Apache Tuning Guide

Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Claudio Miranda
 
Minicurso GNU/Linux básico - Aula2 - Semana Sistemas de Informação 2015 - UNI...
Minicurso GNU/Linux básico - Aula2 - Semana Sistemas de Informação 2015 - UNI...Minicurso GNU/Linux básico - Aula2 - Semana Sistemas de Informação 2015 - UNI...
Minicurso GNU/Linux básico - Aula2 - Semana Sistemas de Informação 2015 - UNI...Marlon Willrich
 
Escalabilidade e alta disponibilidade no php com nginx
Escalabilidade e alta disponibilidade no php com nginxEscalabilidade e alta disponibilidade no php com nginx
Escalabilidade e alta disponibilidade no php com nginxSaveincloud
 
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]Tiago Hillebrandt
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresDouglas V. Pasqua
 
Melhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressMelhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressJulian Fernandes
 
Oficina de Squid: Filtros Inteligentes
 Oficina de Squid: Filtros Inteligentes Oficina de Squid: Filtros Inteligentes
Oficina de Squid: Filtros InteligentesThiago Finardi
 
ASP.NET WebForms x ASP.NET MVC
ASP.NET WebForms x ASP.NET MVCASP.NET WebForms x ASP.NET MVC
ASP.NET WebForms x ASP.NET MVCFelipe Pimentel
 
Cloud PostgreSQL em alta performance
Cloud PostgreSQL em alta performanceCloud PostgreSQL em alta performance
Cloud PostgreSQL em alta performanceSaveincloud
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctoolse-Setorial
 
#MINI-CURSO - ModSecurity: Servidor Web Apache com um Módulo de Segurança
#MINI-CURSO - ModSecurity: Servidor Web Apache com um Módulo de Segurança#MINI-CURSO - ModSecurity: Servidor Web Apache com um Módulo de Segurança
#MINI-CURSO - ModSecurity: Servidor Web Apache com um Módulo de SegurançaPaulo Henrique
 
Blindando o site Joomla!
Blindando o site Joomla!Blindando o site Joomla!
Blindando o site Joomla!Júlio Coutinho
 
Cache em aplicações web
Cache em aplicações webCache em aplicações web
Cache em aplicações webJean Carlo Emer
 
Faça seu portal voar usando o plone.app.caching
Faça seu portal voar usando o plone.app.cachingFaça seu portal voar usando o plone.app.caching
Faça seu portal voar usando o plone.app.cachingFabiano Weimar
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneosFernando Ike
 

Similar to Apache Tuning Guide (20)

Squid proxy
Squid proxySquid proxy
Squid proxy
 
Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7
 
Minicurso GNU/Linux básico - Aula2 - Semana Sistemas de Informação 2015 - UNI...
Minicurso GNU/Linux básico - Aula2 - Semana Sistemas de Informação 2015 - UNI...Minicurso GNU/Linux básico - Aula2 - Semana Sistemas de Informação 2015 - UNI...
Minicurso GNU/Linux básico - Aula2 - Semana Sistemas de Informação 2015 - UNI...
 
Escalabilidade e alta disponibilidade no php com nginx
Escalabilidade e alta disponibilidade no php com nginxEscalabilidade e alta disponibilidade no php com nginx
Escalabilidade e alta disponibilidade no php com nginx
 
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedores
 
Melhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressMelhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPress
 
Oficina de Squid: Filtros Inteligentes
 Oficina de Squid: Filtros Inteligentes Oficina de Squid: Filtros Inteligentes
Oficina de Squid: Filtros Inteligentes
 
ASP.NET WebForms x ASP.NET MVC
ASP.NET WebForms x ASP.NET MVCASP.NET WebForms x ASP.NET MVC
ASP.NET WebForms x ASP.NET MVC
 
Vamos conversar sobre cache
Vamos conversar sobre cacheVamos conversar sobre cache
Vamos conversar sobre cache
 
Tutorial memcached
Tutorial memcachedTutorial memcached
Tutorial memcached
 
Cloud PostgreSQL em alta performance
Cloud PostgreSQL em alta performanceCloud PostgreSQL em alta performance
Cloud PostgreSQL em alta performance
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctools
 
#MINI-CURSO - ModSecurity: Servidor Web Apache com um Módulo de Segurança
#MINI-CURSO - ModSecurity: Servidor Web Apache com um Módulo de Segurança#MINI-CURSO - ModSecurity: Servidor Web Apache com um Módulo de Segurança
#MINI-CURSO - ModSecurity: Servidor Web Apache com um Módulo de Segurança
 
Blindando o site Joomla!
Blindando o site Joomla!Blindando o site Joomla!
Blindando o site Joomla!
 
Cache em aplicações web
Cache em aplicações webCache em aplicações web
Cache em aplicações web
 
Servidor Proxy Squid
Servidor Proxy SquidServidor Proxy Squid
Servidor Proxy Squid
 
Faça seu portal voar usando o plone.app.caching
Faça seu portal voar usando o plone.app.cachingFaça seu portal voar usando o plone.app.caching
Faça seu portal voar usando o plone.app.caching
 
Windows Azure - Maneiras de uilizar PHP
Windows Azure - Maneiras de uilizar PHPWindows Azure - Maneiras de uilizar PHP
Windows Azure - Maneiras de uilizar PHP
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneos
 

Apache Tuning Guide

  • 1. Apache Performance Tuning 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 1
  • 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. 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. 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. Otimização ● 21.fev.2014 Por onde começar? Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 6
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. .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. .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. 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. 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. Para os desenvolvedores 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 23
  • 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. 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. 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. Perguntas? 21.fev.2014 Marcos Sungaila – marcos@savant.com.br CC Attribution-ShareAlike 3.0 Unported License 27
  • 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