Performance (Web&PHP)

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    8 Favorites & 1 Group

    Performance (Web&PHP) - Presentation Transcript

    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. 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. 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. 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. PHP Summer School Arquitectura Performance e Escalabilidade • Performance != velocidade de execução • Performance = compromisso entre velocidade e escalabilidade Performance 5
    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. 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. PHP Summer School Arquitectura Performance e Escalabilidade Performance 7
    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. 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. 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. PHP Summer School Arquitectura Conteúdo Estático vs Dinâmico Performance 8
    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. 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. 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. PHP Summer School Arquitectura Webserver Performance 9
    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. 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. PHP Summer School Arquitectura Webserver Exemplo de uma Arquitectura escalável: Performance 10
    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. PHP Summer School Arquitectura Compressão de Conteúdo Performance 12
    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. 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. 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. 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. PHP Summer School Arquitectura Compiler/Opcode Caching Performance 15
    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. 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. 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. 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. 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 = \"N;/path\" • 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. 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. 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. 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. 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. PHP Summer School PHP Caching Performance 23
    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. 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. 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. 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. 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. PHP Summer School Opções de código a considerar Profiling Results: Como posso optimizar o script? Performance 25
    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. 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. PHP Summer School Opções de código a considerar Profiling Results: Agora que já sabem, optimizem! Performance 28
    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. 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. 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. 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

    Nuno LoureiroNuno Loureiro, 2 years ago

    custom

    4480 views, 8 favs, 3 embeds more stats

    PHP Summer School, Lisbon, Jul 2007
    Performance Mod more

    More Info

    © All Rights Reserved

    Go to text version
    • Total Views 4480
      • 4453 on SlideShare
      • 27 from embeds
    • Comments 0
    • Favorites 8
    • Downloads 2
    Most viewed embeds
    • 25 views on http://phpsummerschool.blogs.sapo.pt
    • 1 views on https://s3.amazonaws.com
    • 1 views on http://static.slideshare.net

    more

    All embeds
    • 25 views on http://phpsummerschool.blogs.sapo.pt
    • 1 views on https://s3.amazonaws.com
    • 1 views on http://static.slideshare.net

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as innappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel

    Categories

    Groups / Events