Tuning Apache/MySQL/PHP para desenvolvedores

10,527 views

Published on

Slides of talk presented in PHP Conference Brazil 2012. Many simple tips about tuning of Apache, PHP and MySQL. Enjoy!

Published in: Technology
3 Comments
19 Likes
Statistics
Notes
No Downloads
Views
Total views
10,527
On SlideShare
0
From Embeds
0
Number of Embeds
279
Actions
Shares
0
Downloads
218
Comments
3
Likes
19
Embeds 0
No embeds

No notes for slide

Tuning Apache/MySQL/PHP para desenvolvedores

  1. 1. Tuning Apache/MySQL/PHP para Desenvolvedores By Douglas V. Pasqua Zend Certified Engineer / LPI / SCJP douglas.pasqua@gmail.com
  2. 2. Objetivos● Dicas de Tuning para Apache/MySQL e PHP.● Parâmetros de configuração para tuning de Apache e MySQL● Instalação e configuração de ferramentas de tuning.● Análise de códigos PHP.● Identifcar Gargalos.● Voltado para desenvolvedores.
  3. 3. Tópicos Apache● AllowOverride● mod_status● SymLinks● KeepAlive● MaxClients● Outras dicas
  4. 4. Apache● AllowOverride● mod_status● SymLinks● KeepAlive● MaxClients● Outras Dicas
  5. 5. Apache, AllowOverride● Permite sobrescrever configurações do Apache através dos arquivos .htaccess:
  6. 6. Apache, AllowOverride● Caso habilitado, Apache terá que checar por arquivos .htaccess em todas requisições.● Sempre que possível, manter desabilitado.
  7. 7. Apache, AllowOverride● Transportar as configurações de .htaccess para o arquivo de configuração principal
  8. 8. Apache● AllowOverride● ExtendedStatus● SymLinks● KeepAlive● MaxClients● Outras Dicas
  9. 9. Apache, mod_status● O mod_status permite acompanhar a performance do servidor Apache.● Ideal para identificar se há necessidade de aumentar os recursos do apache.
  10. 10. Apache, mod_status
  11. 11. Apache, mod_status● Manter o parâmetro ExtendedStatus para Off, para melhor performance.
  12. 12. Apache● AllowOverride● mod_status● SymLinks● KeepAlive● MaxClients● MaxRequestsPerChild● Outras Dicas
  13. 13. Apache, SymLinks● Diz ao Apache para seguir/não seguir links simbólicos.● Manter desabilitado faz com que o Apache realize checagens extras. (verificando se o arquivo acessado é um link ou não)
  14. 14. Apache● AllowOverride● ExtendedStatus● SymLinks● KeepAlive● MaxClients● MaxRequestsPerChild● Outras Dicas
  15. 15. Apache, KeepAlive● KeepAlive. ○ Permite múltiplas requisições por uma mesma conexão TCP ○ Melhora desempenho do site. ○ Reduz utilização de CPU. ○ Aumenta consumo de memória.
  16. 16. Apache, KeepAlive
  17. 17. Apache● AllowOverride● ExtendedStatus● SymLinks● KeepAlive● MaxClients● Outras Dicas
  18. 18. Apache, MaxClients● Determina o limite máximo de conexões simultâneas no Apache.● Aumentar também o ServerLimit quando > 256 ○ Padrão 256 ○ Setar antes de MaxClients
  19. 19. Apache, MaxClients MaxClients ≈ (RAM - memória outros processos) / (média do processo apache)● RAM6109184 Kb (free -m)● Média de Memória do Apache12000kb (ps -ylC apache2 --sort:rss)● Reservar memória para outros processos819200kbMaxClients = (6109184 - 819200) / 12000MaxClients = 441
  20. 20. Apache● AllowOverride● ExtendedStatus● SymLinks● KeepAlive● MaxClients● Outras Dicas
  21. 21. Apache, Outras Dicas● mod_deflate ○ Habilita compressão de dados. ○ Ideal para arquivos estáticos (html, css, javascript, xml, etc.) ○ Maioria dos navegadores modernos suportam nativamente.● Separar conteúdo estático de conteúdo dinâmico. ○ Usar um servidor Http mais leve para conteúdo estático.
  22. 22. MySQL● Monitorando consultas lentas● max_connections● table_cache● query_cache_size● thread_cache_size
  23. 23. MySQL, Consultas Lentas● Habilitar o log de consultas lentas permite identificar gargalos de maneira simples.● Para Habiltiar, editar o my.cnf e acrescentar:[mysqld]...long_query_time = 1log_slow_queries = /var/log/mysql-slow.log
  24. 24. MySQL, Consultas Lentas● Exemplo de Log /var/log/mysql-slow.log:# Time: 110406 17:00:00# Query_time: 9 Lock_time: 0 Rows_sent: 1Rows_examined: 5643851select count(*) from backuplog;
  25. 25. MySQL● Monitorando consultas lentas● max_connections● table_cache● query_cache_size● thread_cache_size
  26. 26. MySQL, max_connections● Determina o número máximo de conexões simultâneas no MySQL.● Aumentar de acordo com a necessidade.● Receber “Too many connections” significa que excedeu esse limite.● Aumentar esse parâmetro influência: ○ Quantidade de Memória disponível. ○ Quantidade de memória usada por cada conexão. ○ Número de file descriptors abertos.
  27. 27. MySQL, max_connections● Para aumentar o número de conexões simultâneas:[mysqld]...max_connections = 200
  28. 28. MySQL, max_connections● Para aumentar o número de conexões simultâneas:[mysqld]...max_connections = 200● Para diagnósticos das conexões em processo no momento:mysql> show processlistG
  29. 29. MySQL● Monitorando consultas lentas● max_connections● table_cache● query_cache_size● thread_cache_size
  30. 30. MySQL, table_cache● Toda vez que o MySQL abre uma tabela, coloca ela em cache.● table_cache define o número de tabelas abertas em cache para todas threads.● Está diretamente relacionado com o parâmetro max_connections:table_cache = max_connections * n● n é o número máximo de tabelas usadas na query em que você possui mais Joins no sistema.
  31. 31. MySQL, table_cache● table_cache é limitado pelo número de file descriptors disponiveis pelo S.O.● Utiliza mais memória, porém melhora a performance.● Lembre-se que precisa reservar extra file descriptors para tabelas temporárias e arquivos.● Verificar número de file descriptors do S.O. (Linux):# cat /proc/sys/fs/file-max# lsof -p $(pidof mysqld) | wc -l
  32. 32. MySQL● Monitorando consultas lentas● max_connections● table_cache● query_cache_size● thread_cache_size
  33. 33. MySQL, query_cache_size● Quantidade de memória alocada para guardar resultado das queries.● Por padrão o valor é 0 (Desabilitado).● Os valores para esse parâmetro devem ser múltiplos de 1024.● Cuidado para não setar para um valor muito alto. As threads precisam fazer lock no cache durante updates.● O valor mínimo é 40Kb, para alocação das estruturas.
  34. 34. MySQL, query_cache_size [mysqld] ...query_cache_size = 128M
  35. 35. MySQL● Monitorando consultas lentas● max_connections● table_cache● query_cache_size● thread_cache_size
  36. 36. MySQL, thread_cache_size● Quantidade de threads em cache. (Conexões persistentes).● Diminuir o máximo possível a criação de novas threads.● Equação para testar a eficiência do cache:100 - ((Threads_created / Connections) * 100) = 99%
  37. 37. MySQL, thread_cache_size● Equação para testar a eficiência do cache:100 - ((Threads_created / Connections) * 100)Threads_created Número de Threads criadas desde que o MySQL foi iniciado.Connections Número total de conexões desde que o MySQL foi iniciado.
  38. 38. MySQL, thread_cache_sizeThreads_createdThreads_created: 1294
  39. 39. MySQL, thread_cache_sizeConnections:Connections: 7321961
  40. 40. MySQL, thread_cache_sizeThreads_created: 1294Connections: 7321961100 - ((1294 / 7321961) * 100) = 99,98%
  41. 41. PHP● Identificando gargalos em aplicação PHP● memcached● Opções de aceleradores de código php● Usando APC (Alternative PHP Cache)● Caching com Zend_Cache● PHP e Computação em Nuvem
  42. 42. PHP, Profiler● O Profiler do xdebug permite identificar gargalhos e/ou partes mais lentas de sua aplicação.● Ideal para saber em quais pontos você pode melhor o desempenho.
  43. 43. PHP, Profiler● Habilitando o Profiler do xdebug no PHP:$ sudo apt-get install php5-xdebug● Editando o arquivo /etc/php5/apache2/conf.d/xdebug.ini:zend_extension=/usr/lib/php5/20090626/xdebug.soxdebug.profiler_enable = 1xdebug.profiler_output_dir = /log/xdebug● Finalizando:$ sudo chown www-data /log/xdebug$ sudo service apache2 restart
  44. 44. PHP, Profiler
  45. 45. PHP, Profiler● webgrind - https://code.google.com/p/webgrind/ ○ Ferramenta para análise de logs do xdebug profiler● config.php:
  46. 46. PHP, Profiler
  47. 47. PHP● Identificando gargalos em aplicação PHP● memcached● Opções de aceleradores de código php● Usando APC (Alternative PHP Cache)● Caching com Zend_Cache● PHP e Computação em Nuvem
  48. 48. PHP, memcached● Sistema de cache de alta perfomance com dados armazenados em memória.
  49. 49. PHP, memcached● Sistema de cache de alta perfomance com dados armazenados em memória.● Principal propósito: ○ Diminuir a carga em banco de dados de aplicações web.● Instalável através de uma extensão PECL.
  50. 50. PHP, memcached● Inserindo e obtendo dados do cache:
  51. 51. PHP, memcached● Limpando dados do cache:
  52. 52. PHP● Identificando gargalos em aplicação PHP● memcached● Opções de aceleradores de código php● Usando APC (Alternative PHP Cache)● Caching com Zend_Cache● PHP e Computação em Nuvem
  53. 53. PHP, aceleradores de código● APC - Alternative PHP Cache. ○ Ideal para WebServers muito carregados e aplicações com muitos componentes. ○ Software Livre ○ Mantido pelos desenvolvedores do core do PHP. ○ Distribuído através de um pacote PECL. ○ Previsão para estar integrado junto com o PHP versão 5.4 ○ Compatibilidade com Zend Optimizer ○ Fácil administração ○ Suporte para Windows ○ Suporte para PHP 5.4
  54. 54. PHP, aceleradores de código● XCache ○ Mantido pelo mesmo desenvolvedor do lighttpd. ○ Performance semelhante APC ou até melhor. ○ Suporte para PHP 5.4.● Zend Server ○ Possui cache de opcode interno ○ Opção comercial
  55. 55. PHP● Identificando gargalos em aplicação PHP● memcached● Opções de aceleradores de código php● Usando APC (Alternative PHP Cache)● Caching com Zend_Cache● PHP e Computação em Nuvem
  56. 56. PHP, APC
  57. 57. PHP, APC● Interface Administrativa:
  58. 58. PHP, APC● Usando APC como cache de dados:
  59. 59. PHP● Identificando gargalos em aplicação PHP● memcached● Opções de aceleradores de código php● Usando APC (Alternative PHP Cache)● Caching com Zend_Cache● PHP e Computação em Nuvem
  60. 60. PHP, Zend_Cache● Classe de Cache distribuído junto com o Zend Framework.● Pode ser utilizado como Stand Alone ou junto com o MVC.● Provê uma forma genérica de realizar cache de dados.
  61. 61. PHP, Zend_Cache● Adapters ○ APC ○ Dba ○ Filesystem ○ Memcached ○ Memory ○ WinCache ○ ZendServerDisk ○ ZendServerShm
  62. 62. PHP, Zend_Cache● Exemplo de utilização do Zend_Cache
  63. 63. PHP● Identificando gargalos em aplicação PHP● memcached● Opções de aceleradores de código php● Usando APC (Alternative PHP Cache)● Caching com Zend_Cache● PHP e Computação em Nuvem
  64. 64. PHP, Cloud● IaaS (Infrastructure-as-a-Service) ○ Infraestrutura (Recursos) são contratados como serviço. ■ rede, armazenamento, memória, cpu, etc. ○ Alta escalabilidade. ○ Sistema de monitoramento avançado. ○ Sistemas IaaS mais conhecidos: ■ EC2 Amazon ■ IBM SmartCloud
  65. 65. PHP, Cloud● PaaS (Plataforme-as-a-Service) ○ Plataforma para criação, hospedagem e controle de Software. ○ Fácil Escalabilidade. ○ Não se preocupe mais com administração de infraestrutura. ○ Segurança Integrada. ○ Sistemas PaaS mais conhecidos: ■ Google AppEngine ■ Force.com ■ Zend Developer Cloud
  66. 66. PHP, Cloud● SaaS (Software-as-a-Service). ○ Não se preocupe mais com instalação de software ○ Software utilizado 100% via Web. ○ Não há aquisição de licenças. ○ Pague somente pela utilização do serviço. ○ Disponibiliza API para integrações externas. ○ Sistemas SaaS mais conhecidos: ■ Google Docs ■ Gmail ■ Hotmail
  67. 67. PHP, Cloud● Amazon ○ Amazon S3 (Simple Storage Service) ○ Simple Queue Service (SQS) ○ SimpleDB ○ EC2 (Elastic Compute Cloud) ○ Auto Scaling ○ ... http://aws.amazon.com/pt/php/
  68. 68. PHP, Cloud● Windows Azure ○ Blob Storage ○ Table Service ○ Queue Storage ○ SQL Database ○ SendGrid Email Service ○ ... http://www.windowsazure.com/en-us/develop/php/
  69. 69. PHP, Cloud● www.phpcloud.com (Zend Developer Cloud)● O que é ? ○ Ambiente para rodar aplicações em php na Nuvem. ○ Criado pela própria Zend. ○ Ambiente PaaS. ○ Infraestrutura interna usando Zend Server.● Elástico ○ Fácil escalabilidade. ○ Permite que você aumente ou diminui recursos conforme necessidade.
  70. 70. PHP, Cloud● www.phpcloud.com (Zend Developer Cloud)● Rápido ○ Ambiente otimizado para diminuir tempo de resposta de requisições. ○ Acelerador de código. ○ Cache de bytecode. ○ Cache de dados. ○ Cache total de páginas.
  71. 71. PHP, Cloud● www.phpcloud.com (Zend Developer Cloud)● Seguro ○ Alta disponibilidade. ○ Monitoração de Aplicação. ○ Hot Fixes.● Plataformas ○ RightScale ○ Amazon ○ Rackspace ○ IBM SmartCloud
  72. 72. PHP, Cloud● www.phpcloud.com (Zend Developer Cloud)
  73. 73. PHP, Cloud● Simple Cloud API ○ Interface comum para diversos serviços de aplicações em cloud. ○ Distribuído junto com Zend Framework.● File Storage ○ Amazon S3. ○ Table Storage Windows Azure. ○ Cloud Storage Nirvanix ○ Rackspace
  74. 74. PHP, Cloud● Simple Cloud API● Document Service ○ Amazon SimpleDB. ○ Table Service Windows Azure● Queue Service ○ Amazon Sqs ○ Queue Service Windows Azure● Infrastructure Services ○ Amazon EC2 ○ Rackspace Cloud Servers
  75. 75. Obrigado por assistir! Para saber mais:http://dpasqua.wordpress.com douglas.pasqua@gmail.com

×