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