Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
PHP Summer School
PHP Summer School




 Desenvolvimento Orientado à Performance
                      Nuno Loureiro <nuno...
PHP Summer School
 About me

 •   Licenciatura em Eng. Sistemas e Computação
 •   Começou a usar Linux em 1995

 •   Começ...
PHP Summer School
Sumário - parte I


      •       Arquitectura
               •   Performance e Escalabilidade
         ...
PHP Summer School
 Sumário - parte II


         •    PHP
                  •   Profiling
                  •   Caching
  ...
PHP Summer School
 Arquitectura
 Performance e Escalabilidade

   • Performance != velocidade de execução
   • Performance...
PHP Summer School
 Arquitectura
 Performance e Escalabilidade
Exemplo:
              Script que leia um ficheiro binário d...
PHP Summer School
 Arquitectura
 Performance e Escalabilidade
Exemplo:
              Script que leia um ficheiro binário d...
PHP Summer School
 Arquitectura
 Performance e Escalabilidade




Performance                                    7
PHP Summer School
 Arquitectura
 Performance e Escalabilidade
    • A.php: Leitura única do ficheiro => Mais rápido
    • B...
PHP Summer School
 Arquitectura
 Performance e Escalabilidade
    • A.php: Leitura única do ficheiro => Mais rápido
    • B...
PHP Summer School
 Arquitectura
 Performance e Escalabilidade
    • A.php: Leitura única do ficheiro => Mais rápido
    • B...
PHP Summer School
 Arquitectura
 Conteúdo Estático vs Dinâmico




Performance                                     8
PHP Summer School
 Arquitectura
 Conteúdo Estático vs Dinâmico
   Conteúdo Estático:                               Conteúd...
PHP Summer School
 Arquitectura
 Conteúdo Estático vs Dinâmico
   Conteúdo Estático:                                    Co...
PHP Summer School
 Arquitectura
 Conteúdo Estático vs Dinâmico
   Conteúdo Estático:                                    Co...
PHP Summer School
 Arquitectura
 Webserver




Performance                    9
PHP Summer School
 Arquitectura
 Webserver
Arquitectura mais comum:

              Apache

              PHP
      Apache ...
PHP Summer School
 Arquitectura
 Webserver
Arquitectura mais comum:                A ganhar bastante popularidade:
       ...
PHP Summer School
 Arquitectura
 Webserver
 Exemplo de uma Arquitectura escalável:




Performance                        ...
PHP Summer School
 Arquitectura
 Webserver
 Dicas:
 • Compilar apenas com os módulos necessários
 • Desligar tudo o que nã...
PHP Summer School
Arquitectura
Compressão de Conteúdo




Performance                             12
PHP Summer School
Arquitectura
Compressão de Conteúdo




         Compressão de Conteúdo
              •   A maioria dos ...
PHP Summer School
Arquitectura
Compressão de Conteúdo
Menos output ...
  •    usa menos largura de banda
  •    poupa €€€
...
PHP Summer School
Arquitectura
Optimizações de Compilador

    Para máxima performance é crucial que todo o software seja
...
PHP Summer School
 Arquitectura
 Tuning php.ini

     • Settings aconselhados ** php.ini:
                                ...
PHP Summer School
 Arquitectura
Compiler/Opcode Caching




Performance                              15
PHP Summer School
 Arquitectura
Compiler/Opcode Caching
                          • O ciclo a branco acontece para cada fic...
PHP Summer School
 Arquitectura
Compiler/Opcode Caching
                          • O ciclo a branco acontece para cada fic...
PHP Summer School
 Arquitectura
Compiler/Opcode Caching
Opções mais populares para Opcode Cache:
 • Alternative PHP Cache ...
PHP Summer School
 Arquitectura
 Bottlenecks


      •       Bottlenecks típicos de uma Arquitectura:
               •   I...
PHP Summer School
 Arquitectura
 Session Storage
   Para um único servidor:
      •   Por default cada sessão de PHP é gua...
PHP Summer School
Arquitectura
 Benchmarking
Opções mais populares para Benchmarking de conteúdo:
      Apache Benchmark -...
PHP Summer School
 Sumário - parte II


         •    PHP
                  •   Profiling
                  •   Caching
  ...
PHP Summer School
 PHP
 Profiling
  •   PHP Debugger (APD) - http://pecl.php.net/package/apd




  •    Zend Platform / Zen...
PHP Summer School
 PHP
 Profiling
              PEAR Benchmark_Profiler

                 Result




                  Méto...
PHP Summer School
 PHP
 Caching




Performance                  23
PHP Summer School
 PHP
 Caching
 O que é?
       •      Caching é o reconhecimento do facto que a maioria dos
            ...
PHP Summer School
 PHP
 Caching
 O que é?
       •      Caching é o reconhecimento do facto que a maioria dos
            ...
PHP Summer School
 PHP
 Caching
 O que é?
       •      Caching é o reconhecimento do facto que a maioria dos
            ...
PHP Summer School
 PHP
 Caching
 O que é?
       •      Caching é o reconhecimento do facto que a maioria dos
            ...
PHP Summer School
 PHP
 Caching
   Tipos de cache:
        •      Full Content Caching
        •      Partial Content Cach...
PHP Summer School
Opções de código a considerar




                      Profiling Results:




                          ...
PHP Summer School
 PHP
Opções de código a considerar
 • Evitar usar Regular Expressions
        •   preg_match() => strpos...
PHP Summer School
 PHP
Opções de código a considerar
• Para Arrays Associativos usar foreach() em vez de while(list()=   e...
PHP Summer School
Opções de código a considerar




                      Profiling Results:




                          ...
PHP Summer School
 PHP
Opções de código a considerar



                  Profiling Results:




                          ...
PHP Summer School
 PHP
 80/20 rule



              80% do teu código demora menos de
              20% do tempo total de ...
PHP Summer School
Bases de Dados
O que evitar e o que usar



          •   Evitar:
              •   usar joins
         ...
PHP Summer School
PHP Summer School




                                  FIM!
                           Obrigado, pergun...
Upcoming SlideShare
Loading in …5
×

Performance (Web&PHP)

6,727 views

Published on

PHP Summer School, Lisbon, Jul 2007
Performance Module

Published in: Technology
  • Be the first to comment

Performance (Web&PHP)

  1. 1. PHP Summer School PHP Summer School Desenvolvimento Orientado à Performance Nuno Loureiro <nuno@co.sapo.pt> http://blog.sig9.net/ 20/07/2007 Nuno Loureiro <nuno@co.sapo.pt> 20/07/2007
  2. 2. PHP Summer School About me • Licenciatura em Eng. Sistemas e Computação • Começou a usar Linux em 1995 • Começou a programar PHP em 1999 • Organizou o 1º Simpósio de Linux em 1999 - Simplinux • Sócio-fundador da ETH em 1999 • Autor do artigo “Programming PHP with Security in Mind” na Linux Journal 10/2002 • Juntou-se à equipa do SAPO em 2002 • Programador do Webmail do SAPO • Gestor técnico da plataforma de email do SAPO • Zend Certified Engineer em 2005 Performance 2
  3. 3. PHP Summer School Sumário - parte I • Arquitectura • Performance e Escalabilidade • Conteúdo Estático vs Dinâmico • Webserver • Compressão de Conteúdo • Optimizações de Compilador • Tuning php.ini • Compiler/Opcode Caching • Bottlenecks • Session Storage • Benchmarking Performance 3
  4. 4. PHP Summer School Sumário - parte II • PHP • Profiling • Caching • Opções de código a considerar • Regra 80/20 • Bases de Dados • O que evitar e o que usar Performance 4
  5. 5. PHP Summer School Arquitectura Performance e Escalabilidade • Performance != velocidade de execução • Performance = compromisso entre velocidade e escalabilidade Performance 5
  6. 6. PHP Summer School Arquitectura Performance e Escalabilidade Exemplo: Script que leia um ficheiro binário de 5Mb e escreva outro ficheiro com o conteúdo do primeiro mas codificado em base64 Performance 6
  7. 7. PHP Summer School Arquitectura Performance e Escalabilidade Exemplo: Script que leia um ficheiro binário de 5Mb e escreva outro ficheiro com o conteúdo do primeiro mas codificado em base64 Exemplo A.php: implementação tendo em conta a velocidade Exemplo B.php: implementação tendo em conta a escalabilidade A.php B.php Performance 6
  8. 8. PHP Summer School Arquitectura Performance e Escalabilidade Performance 7
  9. 9. PHP Summer School Arquitectura Performance e Escalabilidade • A.php: Leitura única do ficheiro => Mais rápido • B.php: Múltiplas leituras do ficheiro => Mais lento A.php B.php Performance 7
  10. 10. PHP Summer School Arquitectura Performance e Escalabilidade • A.php: Leitura única do ficheiro => Mais rápido • B.php: Múltiplas leituras do ficheiro => Mais lento No entanto, • A.php: Leitura única do ficheiro => Mais memória usada (~=2x5Mb) • B.php: Múltiplas leituras do ficheiro => Pouca memória usada A.php B.php Performance 7
  11. 11. PHP Summer School Arquitectura Performance e Escalabilidade • A.php: Leitura única do ficheiro => Mais rápido • B.php: Múltiplas leituras do ficheiro => Mais lento No entanto, • A.php: Leitura única do ficheiro => Mais memória usada (~=2x5Mb) • B.php: Múltiplas leituras do ficheiro => Pouca memória usada Com 100 instâncias em paralelo, • A.php: Ocupa cerca de 1Gb RAM => Usa Swap => LENTO! • B.php: Consumo de memória praticamente não cresce => Impacto na performance pouco significativo => MAIS RAPIDO! A.php B.php Performance 7
  12. 12. PHP Summer School Arquitectura Conteúdo Estático vs Dinâmico Performance 8
  13. 13. PHP Summer School Arquitectura Conteúdo Estático vs Dinâmico Conteúdo Estático: Conteúdo Dinâmico: • • Não envolve processamento extra Envolve processamento extra • • Servido directamente pelo servidor Web Servidor Web => Engine que interpreta o script • • Mais leve e rápido Mais lento que conteúdo estático • • exemplos: imagens, HTML, Javascript exemplos: PHP Perl, Python, Ruby , Performance 8
  14. 14. PHP Summer School Arquitectura Conteúdo Estático vs Dinâmico Conteúdo Estático: Conteúdo Dinâmico: • • Não envolve processamento extra Envolve processamento extra • • Servido directamente pelo servidor Web Servidor Web => Engine que interpreta o script • • Mais leve e rápido Mais lento que conteúdo estático • • exemplos: imagens, HTML, Javascript exemplos: PHP Perl, Python, Ruby , Para obter máxima Performance/Escalabilidade: • Usar sempre que possível conteúdo estático (pre-executar os scripts e servir sempre o conteúdo estático resultante) • Quando não é possível usar apenas conteúdo estático, dividir página em componentes e tornar estático os componentes que podem ser estáticos. (Ex: Portal com blocos de notícias) • Mas, nem sempre precisamos deste tipo de solução. Existem também outras alternativas tipo cache. Performance 8
  15. 15. PHP Summer School Arquitectura Conteúdo Estático vs Dinâmico Conteúdo Estático: Conteúdo Dinâmico: • • Não envolve processamento extra Envolve processamento extra • • Servido directamente pelo servidor Web Servidor Web => Engine que interpreta o script • • Mais leve e rápido Mais lento que conteúdo estático • • exemplos: imagens, HTML, Javascript exemplos: PHP Perl, Python, Ruby , Para obter máxima Performance/Escalabilidade: • Usar sempre que possível conteúdo estático (pre-executar os scripts e servir sempre o conteúdo estático resultante) • Quando não é possível usar apenas conteúdo estático, dividir página em componentes e tornar estático os componentes que podem ser estáticos. (Ex: Portal com blocos de notícias) • Mas, nem sempre precisamos deste tipo de solução. Existem também outras alternativas tipo cache. Dica: devido às limitações de pipelining dos browsers usar um domínio diferente para servir conteúdo estático Performance 8
  16. 16. PHP Summer School Arquitectura Webserver Performance 9
  17. 17. PHP Summer School Arquitectura Webserver Arquitectura mais comum: Apache PHP Apache + mod_php • “A” da arquitectura LAMP • Popular por algum motivo • PHP está embutido no Apache • Processos Apache ocupam mais RAM • Se o Apache estiver a servir muitos clientes lentos vai ter muita memória ocupada inutilmente Performance 9
  18. 18. PHP Summer School Arquitectura Webserver Arquitectura mais comum: A ganhar bastante popularidade: Lighttpd Apache PHP PHP Apache + mod_php Lighttpd + php fcgi • “A” da arquitectura LAMP • Rápido que se farta para conteúdo • Popular por algum motivo estático. • PHP está embutido no Apache • Separa as águas: • Processos Apache ocupam mais RAM • Servidor HTTP + Servidor PHP • Se o Apache estiver a servir muitos • Podemos criar um cluster de clientes lentos vai ter muita memória servidores HTTP e outro para correr ocupada inutilmente apenas PHP • Se o Lighttpd estiver a servir muitos clientes lentos, não há problema Performance 9
  19. 19. PHP Summer School Arquitectura Webserver Exemplo de uma Arquitectura escalável: Performance 10
  20. 20. PHP Summer School Arquitectura Webserver Dicas: • Compilar apenas com os módulos necessários • Desligar tudo o que não é necessário: • Logs => I/O • Se precisar de Logs: • não converter IPs em Hostnames • rodar os Logs • Status/ExtendStatus • Evitar tudo o que provoque mais do que um stat() por request • Exemplos no Apache: • Manter a lista do “DirectoryIndex” o mais pequena possível • Desactivar o uso de .htaccess com “AllowOverride none” Performance 11
  21. 21. PHP Summer School Arquitectura Compressão de Conteúdo Performance 12
  22. 22. PHP Summer School Arquitectura Compressão de Conteúdo Compressão de Conteúdo • A maioria dos Browsers suporta • Páginas comprimidas são em média 7-10x mais pequenas • Implementações: • Apache 1 (mod_gzip / mod_deflate) • Apache 2 (mod_deflate) • Lighttpd (mod_compress) • PHP: • php.ini: zlib.output compression=1 • no script: ob_start(“ob_gzhandler”) Performance 12
  23. 23. PHP Summer School Arquitectura Compressão de Conteúdo Menos output ... • usa menos largura de banda • poupa €€€ • as páginas carregam mais rapidamente • reduz IO de rede em sites com muito tráfego Compressão de Conteúdo • A maioria dos Browsers suporta • Páginas comprimidas são em média 7-10x mais pequenas • Implementações: • Apache 1 (mod_gzip / mod_deflate) • Apache 2 (mod_deflate) • Lighttpd (mod_compress) • PHP: • php.ini: zlib.output compression=1 • no script: ob_start(“ob_gzhandler”) Performance 12
  24. 24. PHP Summer School Arquitectura Optimizações de Compilador Para máxima performance é crucial que todo o software seja compilado de forma a usar o máximo do hardware disponível • Activar todas as optimizações de compilador com o -O3 • Optimizar o código para o CPU usado via -march -mcpu • Funcionalidades específicas do CPU via -msse -mmmx -mfpmath=sse • Desactivar dados para debug via -fomit-frame-pointer Performance 13
  25. 25. PHP Summer School Arquitectura Tuning php.ini • Settings aconselhados ** php.ini: no • register_globals = Off • register_long_arrays = Off • magic_quotes_gpc = Off • variables_order = “GPCS” • expose_php = Off • register_argc_argv = Off • always_populate_raw_post_data = Off ** • session.use_trans_sid = Off ** • session.auto_start = Off ** • session.gc_divisor = 1000 or 10000 • output_buffering = 4096 ** Desligado por default Performance 14
  26. 26. PHP Summer School Arquitectura Compiler/Opcode Caching Performance 15
  27. 27. PHP Summer School Arquitectura Compiler/Opcode Caching • O ciclo a branco acontece para cada ficheiro incluído e não apenas para o ficheiro principal • A compilação facilmente consome mais tempo do que a execução. Performance 15
  28. 28. PHP Summer School Arquitectura Compiler/Opcode Caching • O ciclo a branco acontece para cada ficheiro incluído e não apenas para o ficheiro principal • A compilação facilmente consome mais tempo do que a execução. Compiler/Opcode Caching • Cada script PHP é compilado apenas uma única vez para cada revision. • Reduz IO de ficheiros, os opcodes são lidos da memória em vez de serem “parsed” do disco. • Os opcodes são optimizados para uma execução mais rápida. Performance 15
  29. 29. PHP Summer School Arquitectura Compiler/Opcode Caching Opções mais populares para Opcode Cache: • Alternative PHP Cache (APC) - http://pecl.php.net/package/APC • pear install pecl.php.net/apc • Adicionar “extension=apc.so” no php.ini • XCache - http://xcache.lighttpd.net/wiki/GettingSource • Zend Platform - http://www.zend.com/ Performance 16
  30. 30. PHP Summer School Arquitectura Bottlenecks • Bottlenecks típicos de uma Arquitectura: • IO de Disco • Evitar logs ou gravar em disco diferente • Drive T uning (hdparm / RAID) • Usar RAM Disk para sessões ou para as sources # Speed Up /tmp Directory mount --bind -ttmpfs /tmp /tmp # Accelerate Scripts Directory mount --bind -ttmpfs /home/webroot /home/webroot • IO de Rede • Usar compressão de conteúdo • Separar Redes e usar mais interfaces de rede Performance 17
  31. 31. PHP Summer School Arquitectura Session Storage Para um único servidor: • Por default cada sessão de PHP é guardada em disco num ficheiro separado • Muitos ficheiros num directório reduz a velocidade de acesso • Separar as sessões em múltiplos directórios • session.save_path = quot;N;/pathquot; • Usar sessões em memória (via Ramdisk, shared memory) Para um cluster de servidores: • Usar Memcache • Usar o Session Clustering do Zend Platform • Fazer stickyness por servidor e usar método convencional para sessões Performance 18
  32. 32. PHP Summer School Arquitectura Benchmarking Opções mais populares para Benchmarking de conteúdo: Apache Benchmark - http://www.apache.org/ httperf http://freshmeat.net/projects/httperf/ http_load http://www.acme.com/software/http_load/ Performance 19
  33. 33. PHP Summer School Sumário - parte II • PHP • Profiling • Caching • Opções de código a considerar • Regra 80/20 • Bases de Dados • O que evitar e o que usar Performance 20
  34. 34. PHP Summer School PHP Profiling • PHP Debugger (APD) - http://pecl.php.net/package/apd • Zend Platform / Zend Studio - http://www.zend.com/ • XDebug - http://xdebug.org/ • kcachegrind Performance 21
  35. 35. PHP Summer School PHP Profiling PEAR Benchmark_Profiler Result Métodos mais úteis da class Pear::Benchmark_Profiler: •start() •stop() •enterSection() •leaveSection() •display() •getAllSectionsInformations() Performance 22
  36. 36. PHP Summer School PHP Caching Performance 23
  37. 37. PHP Summer School PHP Caching O que é? • Caching é o reconhecimento do facto que a maioria dos dados dinâmicos não mudam cada vez que os pedem Performance 23
  38. 38. PHP Summer School PHP Caching O que é? • Caching é o reconhecimento do facto que a maioria dos dados dinâmicos não mudam cada vez que os pedem Como funciona? Performance 23
  39. 39. PHP Summer School PHP Caching O que é? • Caching é o reconhecimento do facto que a maioria dos dados dinâmicos não mudam cada vez que os pedem Como funciona? Vantagens? • Grande aumento de performance • Diminuição na utilização de recursos Performance 23
  40. 40. PHP Summer School PHP Caching O que é? • Caching é o reconhecimento do facto que a maioria dos dados dinâmicos não mudam cada vez que os pedem Como funciona? Vantagens? • Grande aumento de performance • Diminuição na utilização de recursos Desvantagens? • Complexidade da Arquitectura • Potencial para dados inconsistentes Performance 23
  41. 41. PHP Summer School PHP Caching Tipos de cache: • Full Content Caching • Partial Content Caching • After Caching • Permanent Caching • HTP Header Caching Implementações de cache: • Zend Platform (parcial, total) • PEAR::Cache_Lite Performance 24
  42. 42. PHP Summer School Opções de código a considerar Profiling Results: Como posso optimizar o script? Performance 25
  43. 43. PHP Summer School PHP Opções de código a considerar • Evitar usar Regular Expressions • preg_match() => strpos() • preg_replace() => str_replace() ou strstr() • Usar echo em vez de print • Usar pelicas em vez de aspas • Usar ciclos while() em vez de for() e não usar funções nas condições Performance 26
  44. 44. PHP Summer School PHP Opções de código a considerar • Para Arrays Associativos usar foreach() em vez de while(list()= each()) Performance 27
  45. 45. PHP Summer School Opções de código a considerar Profiling Results: Agora que já sabem, optimizem! Performance 28
  46. 46. PHP Summer School PHP Opções de código a considerar Profiling Results: Ganho de 17.3% em relação ao primeiro exemplo Performance 29
  47. 47. PHP Summer School PHP 80/20 rule 80% do teu código demora menos de 20% do tempo total de execução • Não percas tempo a optimizar nada nos 80% • Descobre o que são os 20% a optimizar e optimiza Performance 30
  48. 48. PHP Summer School Bases de Dados O que evitar e o que usar • Evitar: • usar joins • fazer um query por todos os campos para obter apenas um • Usar: • Ferramentas para analisar a execução de queries • indexes nos campos apropriados Performance 31
  49. 49. PHP Summer School PHP Summer School FIM! Obrigado, perguntas? Nuno Loureiro <nuno@co.sapo.pt> http://blog.sig9.net/ 20/07/2007 Nuno Loureiro <nuno@co.sapo.pt> 20/07/2007

×