SlideShare a Scribd company logo
1 of 31
Download to read offline
Meu site Plone está
lento. O que fazer?
Fabiano Weimar dos Santos
xiru@xiru.org
1
quarta-feira, 25 de novembro de 2009
Roteiro
• Por que o Plone é Lento?
• Performance Tuning
• Dicas e Truques
2
quarta-feira, 25 de novembro de 2009
Por que o Plone é
Lento?
• Fato: qualquer software com grande
quantidade de acessos simultâneos costuma
ser lento.
• Não importa a tecnologia adotada!
• O que faz a diferença: atenção com a
infra-estrutura e com a qualidade.
3
quarta-feira, 25 de novembro de 2009
Fatos
• Quanto maior o tráfego de um portal, mais
especializada deverá ser a solução.
• Frameworks genéricos geralmente não tem
boa performance.
• Frameworks agilizam o desenvolvimento,
mas costumam impactar na performance.
4
quarta-feira, 25 de novembro de 2009
Performance Tuning
• Mesmo que você considere algo rápido,
efetue medidas que avaliem a performance
em cenários com centenas de usuários
simultâneos.
• O fenômeno das “redes sociais” pode,
sem aviso prévio, ser um DOS.
5
quarta-feira, 25 de novembro de 2009
Não Chute!
Adote métricas.
6
quarta-feira, 25 de novembro de 2009
Ferramentas
• Medir performance de websites não é uma
tarefa trivial.
• Ferramentas dificilmente simulam
adequadamente o comportamento das
aplicações “reais”.
• Há muitas ferramentas de Benchmark
• http://www.opensourcetesting.org/
performance.php
7
quarta-feira, 25 de novembro de 2009
Ferramentas
• Apache Benchmark - ab
• Acompanha o Apache HTTP Server
• Costuma ser a forma mais simples de medir
a performance de um “request”
• Não avalia o carregamento de css, javascript,
imagens, etc.
• Não leva em consideração a eficiência do
cache dos navegadores.
8
quarta-feira, 25 de novembro de 2009
Ferramentas
Siege - HTTP load testing and
benchmarking utility
http://www.joedog.org/index/siege-home
9
quarta-feira, 25 de novembro de 2009
Ferramentas
Flood - a profile-driven HTTP load tester
http://httpd.apache.org/test/flood/
10
quarta-feira, 25 de novembro de 2009
É importante ter uma medida
de quanto rápido é um site,
com um determinado número
de acessos simultâneos.
11
quarta-feira, 25 de novembro de 2009
Dicas de Otimização de
Performance
• Geralmente é difícil dar dicas “genéricas”
de otimização de performance
• Em linhas gerais, quanto menos páginas o
servidor processa, mais rápido é o site
como um todo (cache)
12
quarta-feira, 25 de novembro de 2009
Dicas de Otimização de
Performance
• Nem todo site precisa de cache
• Há situações onde fazer cache significa
apenas mais processamento e, de fato,
queda de performance (Youtube)
• Desde que não exista processamento
envolvido, nada é mais rápido do que
servir conteúdo estático
13
quarta-feira, 25 de novembro de 2009
Apache mod_rewrite
RewriteCond /PATH_WWW/DOMINIO/%{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} !""
RewriteCond %{HTTP_COOKIE} !__ac=
RewriteCond %{HTTP:Authorization} !""
RewriteCond %{HTTP:If-None-Match} !""
RewriteRule ^/(.*) /DOMINIO/$1 [L]
RewriteCond /PATH_WWW/DOMINIO/%{REQUEST_FILENAME}/index.html -f
RewriteCond %{REQUEST_FILENAME} !""
RewriteCond %{HTTP_COOKIE} !__ac=
RewriteCond %{HTTP:Authorization} !""
RewriteCond %{HTTP:If-None-Match} !""
RewriteRule ^/(.*) /DOMINIO/$1 [L]
14
quarta-feira, 25 de novembro de 2009
Apache mod_rewrite
• $ cd PATH_WWW
• $ wget -m -np http://DOMINIO
15
quarta-feira, 25 de novembro de 2009
Cache Compartilhado
• Nem sempre servir apenas conteúdo
estático é viável
• CMS geralmente não se preocupam em
fazer “static deploy”; apenas publicam
páginas dinâmicas
• A solução mais simples costuma ser
adotar uma camada de webcache (Squid,
Varnish, etc)
16
quarta-feira, 25 de novembro de 2009
Cache Compartilhado
• Use o proxy para barrar tráfego indesejado
• Bots de Indexação (Googlebot, msnbot,
Yahoo Slurp, etc) podem significar até
35% do tráfego
• Tráfego de bots é bastante custoso, pois
não tem caráter repetitivo, desconsidera
a relevância e visita o conteúdo “em
profundidade”
17
quarta-feira, 25 de novembro de 2009
Bloqueio de Bots
(Squid)
acl badrobot browser -i Twiceler
acl badrobot browser -iYeti
acl badrobot browser -i Daumoa
http_access deny badrobot
acl bot browser -i bot
acl bot browser -i crawler
acl bot browser -i Slurp
acl horario_comercial time MTWHF 06:00-23:00
http_access deny horario_comercial bot
18
quarta-feira, 25 de novembro de 2009
Cache Compartilhado
• Para que o cache compartilhado de páginas
dinâmicas seja efetivo é importante que as
páginas sejam geradas com cabeçalhos
HTTP adequados
• Há extensões do Firefox que permitem a
análise facilitada de “headers” HTTP, como
a “web developer,” firebug,YSlow (minha
predileta)
19
quarta-feira, 25 de novembro de 2009
YSlow
20
quarta-feira, 25 de novembro de 2009
Fewer HTTP requests
21
quarta-feira, 25 de novembro de 2009
Add Expires headers
22
quarta-feira, 25 de novembro de 2009
Use a Content Delivery Network
(CDN)
23
quarta-feira, 25 de novembro de 2009
YSlow - Components
24
quarta-feira, 25 de novembro de 2009
YSlow - Statistics
25
quarta-feira, 25 de novembro de 2009
Apache mod_expires
ExpiresActive On
ExpiresDefault "access plus 5 minutes"
ExpiresByType image/gif "access plus 1 day"
ExpiresByType image/jpeg "access plus 1 day"
ExpiresByType image/png "access plus 1 day"
ExpiresByType text/css "access plus 1 day"
ExpiresByType application/x-javascript "access plus 1 day"
26
quarta-feira, 25 de novembro de 2009
Dicas de Otimização de
Performance
• Cuidado com dependências remotas
• browser -> application server ->
webservice -> sgbd -> storage...
• Num cluster, o maior custo costuma não
ser apenas processador, mas sim a
latência de rede
27
quarta-feira, 25 de novembro de 2009
Dicas de Otimização de
Performance
• Evite acordar muitos objetos no SGBD
• Evite conexões com SGBD
• Evite conexões LDAP
• Evite conexões HTTP (RSS, SOAP)
• Não faça conexões sem timeout
28
quarta-feira, 25 de novembro de 2009
Não tente advinhar
porque seu site está
lento: use um profiler!
29
quarta-feira, 25 de novembro de 2009
Dicas de Otimização de
Performance
• Use NTP para sincronizar relógios dos
proxies, servidores de aplicação e banco de
dados
• Evite gerar páginas dinâmicas com
headers que expiram muito rápido
• Falta de sincronia de relógios pode
acarretar a geração de headers “no
passado”
30
quarta-feira, 25 de novembro de 2009
Obrigado!
Fabiano Weimar dos Santos
xiru@xiru.org
31
quarta-feira, 25 de novembro de 2009

More Related Content

Similar to Meu Plone Site está lento. O que fazer???

Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Fabiano Weimar
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
Otimização de Websites para Ganho de Performance & Resiliência
Otimização de Websites para Ganho de Performance & ResiliênciaOtimização de Websites para Ganho de Performance & Resiliência
Otimização de Websites para Ganho de Performance & ResiliênciaSucuri
 
Curso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxCurso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxDell Technologies
 
5 dicas simples de performance
5 dicas simples de performance5 dicas simples de performance
5 dicas simples de performanceCleber Dantas
 
Apresentação do Oraculum Framework (PHP)
Apresentação do Oraculum Framework (PHP)Apresentação do Oraculum Framework (PHP)
Apresentação do Oraculum Framework (PHP)Patrick Kaminski
 
Melhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressMelhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressJulian Fernandes
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaHenrique Lima
 
Plataforma Zope Plone na PGR
Plataforma Zope Plone na PGRPlataforma Zope Plone na PGR
Plataforma Zope Plone na PGRLucas Brasilino
 
Introducao ao sistema de gerenciamento de conteúdo Plone
Introducao ao sistema de gerenciamento de conteúdo PloneIntroducao ao sistema de gerenciamento de conteúdo Plone
Introducao ao sistema de gerenciamento de conteúdo PloneFabiano Weimar
 
Web Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheWeb Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheDell Technologies
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisrafaelberlanda
 
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
 
PHP Papa-Léguas: Performance em PHP
PHP Papa-Léguas: Performance em PHPPHP Papa-Léguas: Performance em PHP
PHP Papa-Léguas: Performance em PHPFlávio Lisboa
 
Performance Codificando Night Week 2016
Performance Codificando Night Week 2016Performance Codificando Night Week 2016
Performance Codificando Night Week 2016Rodolfo Fadino Junior
 
Performance e otimização no wordpress
Performance e otimização no wordpressPerformance e otimização no wordpress
Performance e otimização no wordpressDaniel Paz
 
Workshop Performance Rails
Workshop Performance RailsWorkshop Performance Rails
Workshop Performance RailsVitor Pellegrino
 

Similar to Meu Plone Site está lento. O que fazer??? (20)

Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
 
Browsers como vivem o que fazem
Browsers como vivem o que fazemBrowsers como vivem o que fazem
Browsers como vivem o que fazem
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Otimização de Websites para Ganho de Performance & Resiliência
Otimização de Websites para Ganho de Performance & ResiliênciaOtimização de Websites para Ganho de Performance & Resiliência
Otimização de Websites para Ganho de Performance & Resiliência
 
Curso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxCurso de Performance and Tuning - Linux
Curso de Performance and Tuning - Linux
 
5 dicas simples de performance
5 dicas simples de performance5 dicas simples de performance
5 dicas simples de performance
 
Apresentação do Oraculum Framework (PHP)
Apresentação do Oraculum Framework (PHP)Apresentação do Oraculum Framework (PHP)
Apresentação do Oraculum Framework (PHP)
 
Melhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressMelhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPress
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinada
 
Plataforma Zope Plone na PGR
Plataforma Zope Plone na PGRPlataforma Zope Plone na PGR
Plataforma Zope Plone na PGR
 
Introducao ao sistema de gerenciamento de conteúdo Plone
Introducao ao sistema de gerenciamento de conteúdo PloneIntroducao ao sistema de gerenciamento de conteúdo Plone
Introducao ao sistema de gerenciamento de conteúdo Plone
 
Web seminario varnish
Web seminario varnishWeb seminario varnish
Web seminario varnish
 
Web Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheWeb Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+Apache
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portais
 
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
 
TDC - Da presença online ao Cloud Computing
TDC - Da presença online ao Cloud ComputingTDC - Da presença online ao Cloud Computing
TDC - Da presença online ao Cloud Computing
 
PHP Papa-Léguas: Performance em PHP
PHP Papa-Léguas: Performance em PHPPHP Papa-Léguas: Performance em PHP
PHP Papa-Léguas: Performance em PHP
 
Performance Codificando Night Week 2016
Performance Codificando Night Week 2016Performance Codificando Night Week 2016
Performance Codificando Night Week 2016
 
Performance e otimização no wordpress
Performance e otimização no wordpressPerformance e otimização no wordpress
Performance e otimização no wordpress
 
Workshop Performance Rails
Workshop Performance RailsWorkshop Performance Rails
Workshop Performance Rails
 

More from Fabiano Weimar

Plone, Zope e Python - Da Universidade ao Governo - SulComp II (2006)
Plone, Zope e Python - Da Universidade ao Governo - SulComp II (2006)Plone, Zope e Python - Da Universidade ao Governo - SulComp II (2006)
Plone, Zope e Python - Da Universidade ao Governo - SulComp II (2006)Fabiano Weimar
 
Portal SEBRAE - Quando o Plone Gerencia o Conteúdo Alheio
Portal SEBRAE - Quando o Plone Gerencia o Conteúdo AlheioPortal SEBRAE - Quando o Plone Gerencia o Conteúdo Alheio
Portal SEBRAE - Quando o Plone Gerencia o Conteúdo AlheioFabiano Weimar
 
Integração de sistemas legados com Plone
Integração de sistemas legados com PloneIntegração de sistemas legados com Plone
Integração de sistemas legados com PloneFabiano Weimar
 
Algoritmos genéticos em python - PyConBrasil 3 (2007)
Algoritmos genéticos em python - PyConBrasil 3 (2007)Algoritmos genéticos em python - PyConBrasil 3 (2007)
Algoritmos genéticos em python - PyConBrasil 3 (2007)Fabiano Weimar
 
Adaptando o Plone para plataformas móveis
Adaptando o Plone para plataformas móveisAdaptando o Plone para plataformas móveis
Adaptando o Plone para plataformas móveisFabiano Weimar
 
Plone Yak Shaving and Bikeshedding
Plone Yak Shaving and BikesheddingPlone Yak Shaving and Bikeshedding
Plone Yak Shaving and BikesheddingFabiano Weimar
 
Understanding Plone Security
Understanding Plone SecurityUnderstanding Plone Security
Understanding Plone SecurityFabiano Weimar
 
Tips and Tricks about Plone Development for Mobile Platforms
Tips and Tricks about Plone Development for Mobile PlatformsTips and Tricks about Plone Development for Mobile Platforms
Tips and Tricks about Plone Development for Mobile PlatformsFabiano Weimar
 
Dicas e truques de otimização de websites python
Dicas e truques de otimização de websites pythonDicas e truques de otimização de websites python
Dicas e truques de otimização de websites pythonFabiano Weimar
 
Conhecendo o ubuntu enterprise cloud - UEC
Conhecendo o ubuntu enterprise cloud - UECConhecendo o ubuntu enterprise cloud - UEC
Conhecendo o ubuntu enterprise cloud - UECFabiano Weimar
 
Sistema de protocolo de documentos - SPDO
Sistema de protocolo de documentos - SPDOSistema de protocolo de documentos - SPDO
Sistema de protocolo de documentos - SPDOFabiano Weimar
 
Reconhecimento de fala em português brasileiro
Reconhecimento de fala em português brasileiroReconhecimento de fala em português brasileiro
Reconhecimento de fala em português brasileiroFabiano Weimar
 
Plone na plataforma mobile
Plone na plataforma mobilePlone na plataforma mobile
Plone na plataforma mobileFabiano Weimar
 

More from Fabiano Weimar (18)

Plone, Zope e Python - Da Universidade ao Governo - SulComp II (2006)
Plone, Zope e Python - Da Universidade ao Governo - SulComp II (2006)Plone, Zope e Python - Da Universidade ao Governo - SulComp II (2006)
Plone, Zope e Python - Da Universidade ao Governo - SulComp II (2006)
 
Portal SEBRAE - Quando o Plone Gerencia o Conteúdo Alheio
Portal SEBRAE - Quando o Plone Gerencia o Conteúdo AlheioPortal SEBRAE - Quando o Plone Gerencia o Conteúdo Alheio
Portal SEBRAE - Quando o Plone Gerencia o Conteúdo Alheio
 
Integração de sistemas legados com Plone
Integração de sistemas legados com PloneIntegração de sistemas legados com Plone
Integração de sistemas legados com Plone
 
Algoritmos genéticos em python - PyConBrasil 3 (2007)
Algoritmos genéticos em python - PyConBrasil 3 (2007)Algoritmos genéticos em python - PyConBrasil 3 (2007)
Algoritmos genéticos em python - PyConBrasil 3 (2007)
 
Adaptando o Plone para plataformas móveis
Adaptando o Plone para plataformas móveisAdaptando o Plone para plataformas móveis
Adaptando o Plone para plataformas móveis
 
Plone Yak Shaving and Bikeshedding
Plone Yak Shaving and BikesheddingPlone Yak Shaving and Bikeshedding
Plone Yak Shaving and Bikeshedding
 
Understanding Plone Security
Understanding Plone SecurityUnderstanding Plone Security
Understanding Plone Security
 
Tips and Tricks about Plone Development for Mobile Platforms
Tips and Tricks about Plone Development for Mobile PlatformsTips and Tricks about Plone Development for Mobile Platforms
Tips and Tricks about Plone Development for Mobile Platforms
 
Segurança no plone
Segurança no ploneSegurança no plone
Segurança no plone
 
Dicas e truques de otimização de websites python
Dicas e truques de otimização de websites pythonDicas e truques de otimização de websites python
Dicas e truques de otimização de websites python
 
Conhecendo o ubuntu enterprise cloud - UEC
Conhecendo o ubuntu enterprise cloud - UECConhecendo o ubuntu enterprise cloud - UEC
Conhecendo o ubuntu enterprise cloud - UEC
 
Sistema de protocolo de documentos - SPDO
Sistema de protocolo de documentos - SPDOSistema de protocolo de documentos - SPDO
Sistema de protocolo de documentos - SPDO
 
Novidades do plone 4
Novidades do plone 4Novidades do plone 4
Novidades do plone 4
 
O novo plone 4
O novo plone 4O novo plone 4
O novo plone 4
 
Reconhecimento de fala em português brasileiro
Reconhecimento de fala em português brasileiroReconhecimento de fala em português brasileiro
Reconhecimento de fala em português brasileiro
 
IPv6
IPv6IPv6
IPv6
 
Plone na nuvem
Plone na nuvemPlone na nuvem
Plone na nuvem
 
Plone na plataforma mobile
Plone na plataforma mobilePlone na plataforma mobile
Plone na plataforma mobile
 

Recently uploaded

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 

Recently uploaded (6)

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

Meu Plone Site está lento. O que fazer???

  • 1. Meu site Plone está lento. O que fazer? Fabiano Weimar dos Santos xiru@xiru.org 1 quarta-feira, 25 de novembro de 2009
  • 2. Roteiro • Por que o Plone é Lento? • Performance Tuning • Dicas e Truques 2 quarta-feira, 25 de novembro de 2009
  • 3. Por que o Plone é Lento? • Fato: qualquer software com grande quantidade de acessos simultâneos costuma ser lento. • Não importa a tecnologia adotada! • O que faz a diferença: atenção com a infra-estrutura e com a qualidade. 3 quarta-feira, 25 de novembro de 2009
  • 4. Fatos • Quanto maior o tráfego de um portal, mais especializada deverá ser a solução. • Frameworks genéricos geralmente não tem boa performance. • Frameworks agilizam o desenvolvimento, mas costumam impactar na performance. 4 quarta-feira, 25 de novembro de 2009
  • 5. Performance Tuning • Mesmo que você considere algo rápido, efetue medidas que avaliem a performance em cenários com centenas de usuários simultâneos. • O fenômeno das “redes sociais” pode, sem aviso prévio, ser um DOS. 5 quarta-feira, 25 de novembro de 2009
  • 7. Ferramentas • Medir performance de websites não é uma tarefa trivial. • Ferramentas dificilmente simulam adequadamente o comportamento das aplicações “reais”. • Há muitas ferramentas de Benchmark • http://www.opensourcetesting.org/ performance.php 7 quarta-feira, 25 de novembro de 2009
  • 8. Ferramentas • Apache Benchmark - ab • Acompanha o Apache HTTP Server • Costuma ser a forma mais simples de medir a performance de um “request” • Não avalia o carregamento de css, javascript, imagens, etc. • Não leva em consideração a eficiência do cache dos navegadores. 8 quarta-feira, 25 de novembro de 2009
  • 9. Ferramentas Siege - HTTP load testing and benchmarking utility http://www.joedog.org/index/siege-home 9 quarta-feira, 25 de novembro de 2009
  • 10. Ferramentas Flood - a profile-driven HTTP load tester http://httpd.apache.org/test/flood/ 10 quarta-feira, 25 de novembro de 2009
  • 11. É importante ter uma medida de quanto rápido é um site, com um determinado número de acessos simultâneos. 11 quarta-feira, 25 de novembro de 2009
  • 12. Dicas de Otimização de Performance • Geralmente é difícil dar dicas “genéricas” de otimização de performance • Em linhas gerais, quanto menos páginas o servidor processa, mais rápido é o site como um todo (cache) 12 quarta-feira, 25 de novembro de 2009
  • 13. Dicas de Otimização de Performance • Nem todo site precisa de cache • Há situações onde fazer cache significa apenas mais processamento e, de fato, queda de performance (Youtube) • Desde que não exista processamento envolvido, nada é mais rápido do que servir conteúdo estático 13 quarta-feira, 25 de novembro de 2009
  • 14. Apache mod_rewrite RewriteCond /PATH_WWW/DOMINIO/%{REQUEST_FILENAME} -f RewriteCond %{REQUEST_FILENAME} !"" RewriteCond %{HTTP_COOKIE} !__ac= RewriteCond %{HTTP:Authorization} !"" RewriteCond %{HTTP:If-None-Match} !"" RewriteRule ^/(.*) /DOMINIO/$1 [L] RewriteCond /PATH_WWW/DOMINIO/%{REQUEST_FILENAME}/index.html -f RewriteCond %{REQUEST_FILENAME} !"" RewriteCond %{HTTP_COOKIE} !__ac= RewriteCond %{HTTP:Authorization} !"" RewriteCond %{HTTP:If-None-Match} !"" RewriteRule ^/(.*) /DOMINIO/$1 [L] 14 quarta-feira, 25 de novembro de 2009
  • 15. Apache mod_rewrite • $ cd PATH_WWW • $ wget -m -np http://DOMINIO 15 quarta-feira, 25 de novembro de 2009
  • 16. Cache Compartilhado • Nem sempre servir apenas conteúdo estático é viável • CMS geralmente não se preocupam em fazer “static deploy”; apenas publicam páginas dinâmicas • A solução mais simples costuma ser adotar uma camada de webcache (Squid, Varnish, etc) 16 quarta-feira, 25 de novembro de 2009
  • 17. Cache Compartilhado • Use o proxy para barrar tráfego indesejado • Bots de Indexação (Googlebot, msnbot, Yahoo Slurp, etc) podem significar até 35% do tráfego • Tráfego de bots é bastante custoso, pois não tem caráter repetitivo, desconsidera a relevância e visita o conteúdo “em profundidade” 17 quarta-feira, 25 de novembro de 2009
  • 18. Bloqueio de Bots (Squid) acl badrobot browser -i Twiceler acl badrobot browser -iYeti acl badrobot browser -i Daumoa http_access deny badrobot acl bot browser -i bot acl bot browser -i crawler acl bot browser -i Slurp acl horario_comercial time MTWHF 06:00-23:00 http_access deny horario_comercial bot 18 quarta-feira, 25 de novembro de 2009
  • 19. Cache Compartilhado • Para que o cache compartilhado de páginas dinâmicas seja efetivo é importante que as páginas sejam geradas com cabeçalhos HTTP adequados • Há extensões do Firefox que permitem a análise facilitada de “headers” HTTP, como a “web developer,” firebug,YSlow (minha predileta) 19 quarta-feira, 25 de novembro de 2009
  • 20. YSlow 20 quarta-feira, 25 de novembro de 2009
  • 21. Fewer HTTP requests 21 quarta-feira, 25 de novembro de 2009
  • 22. Add Expires headers 22 quarta-feira, 25 de novembro de 2009
  • 23. Use a Content Delivery Network (CDN) 23 quarta-feira, 25 de novembro de 2009
  • 24. YSlow - Components 24 quarta-feira, 25 de novembro de 2009
  • 25. YSlow - Statistics 25 quarta-feira, 25 de novembro de 2009
  • 26. Apache mod_expires ExpiresActive On ExpiresDefault "access plus 5 minutes" ExpiresByType image/gif "access plus 1 day" ExpiresByType image/jpeg "access plus 1 day" ExpiresByType image/png "access plus 1 day" ExpiresByType text/css "access plus 1 day" ExpiresByType application/x-javascript "access plus 1 day" 26 quarta-feira, 25 de novembro de 2009
  • 27. Dicas de Otimização de Performance • Cuidado com dependências remotas • browser -> application server -> webservice -> sgbd -> storage... • Num cluster, o maior custo costuma não ser apenas processador, mas sim a latência de rede 27 quarta-feira, 25 de novembro de 2009
  • 28. Dicas de Otimização de Performance • Evite acordar muitos objetos no SGBD • Evite conexões com SGBD • Evite conexões LDAP • Evite conexões HTTP (RSS, SOAP) • Não faça conexões sem timeout 28 quarta-feira, 25 de novembro de 2009
  • 29. Não tente advinhar porque seu site está lento: use um profiler! 29 quarta-feira, 25 de novembro de 2009
  • 30. Dicas de Otimização de Performance • Use NTP para sincronizar relógios dos proxies, servidores de aplicação e banco de dados • Evite gerar páginas dinâmicas com headers que expiram muito rápido • Falta de sincronia de relógios pode acarretar a geração de headers “no passado” 30 quarta-feira, 25 de novembro de 2009
  • 31. Obrigado! Fabiano Weimar dos Santos xiru@xiru.org 31 quarta-feira, 25 de novembro de 2009