Your SlideShare is downloading. ×

Tuning Apache/MySQL/PHP para desenvolvedores

7,239

Published on

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

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
9 Likes
Statistics
Notes
No Downloads
Views
Total Views
7,239
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
124
Comments
3
Likes
9
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Tuning Apache/MySQL/PHP para Desenvolvedores By Douglas V. Pasqua Zend Certified Engineer / LPI / SCJP douglas.pasqua@gmail.com
  • 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. Tópicos Apache● AllowOverride● mod_status● SymLinks● KeepAlive● MaxClients● Outras dicas
  • 4. Apache● AllowOverride● mod_status● SymLinks● KeepAlive● MaxClients● Outras Dicas
  • 5. Apache, AllowOverride● Permite sobrescrever configurações do Apache através dos arquivos .htaccess:
  • 6. Apache, AllowOverride● Caso habilitado, Apache terá que checar por arquivos .htaccess em todas requisições.● Sempre que possível, manter desabilitado.
  • 7. Apache, AllowOverride● Transportar as configurações de .htaccess para o arquivo de configuração principal
  • 8. Apache● AllowOverride● ExtendedStatus● SymLinks● KeepAlive● MaxClients● Outras Dicas
  • 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. Apache, mod_status
  • 11. Apache, mod_status● Manter o parâmetro ExtendedStatus para Off, para melhor performance.
  • 12. Apache● AllowOverride● mod_status● SymLinks● KeepAlive● MaxClients● MaxRequestsPerChild● Outras Dicas
  • 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. Apache● AllowOverride● ExtendedStatus● SymLinks● KeepAlive● MaxClients● MaxRequestsPerChild● Outras Dicas
  • 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. Apache, KeepAlive
  • 17. Apache● AllowOverride● ExtendedStatus● SymLinks● KeepAlive● MaxClients● Outras Dicas
  • 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. 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. Apache● AllowOverride● ExtendedStatus● SymLinks● KeepAlive● MaxClients● Outras Dicas
  • 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. MySQL● Monitorando consultas lentas● max_connections● table_cache● query_cache_size● thread_cache_size
  • 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. 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. MySQL● Monitorando consultas lentas● max_connections● table_cache● query_cache_size● thread_cache_size
  • 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. MySQL, max_connections● Para aumentar o número de conexões simultâneas:[mysqld]...max_connections = 200
  • 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. MySQL● Monitorando consultas lentas● max_connections● table_cache● query_cache_size● thread_cache_size
  • 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. 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. MySQL● Monitorando consultas lentas● max_connections● table_cache● query_cache_size● thread_cache_size
  • 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. MySQL, query_cache_size [mysqld] ...query_cache_size = 128M
  • 35. MySQL● Monitorando consultas lentas● max_connections● table_cache● query_cache_size● thread_cache_size
  • 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. 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. MySQL, thread_cache_sizeThreads_createdThreads_created: 1294
  • 39. MySQL, thread_cache_sizeConnections:Connections: 7321961
  • 40. MySQL, thread_cache_sizeThreads_created: 1294Connections: 7321961100 - ((1294 / 7321961) * 100) = 99,98%
  • 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. 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. 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. PHP, Profiler
  • 45. PHP, Profiler● webgrind - https://code.google.com/p/webgrind/ ○ Ferramenta para análise de logs do xdebug profiler● config.php:
  • 46. PHP, Profiler
  • 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. PHP, memcached● Sistema de cache de alta perfomance com dados armazenados em memória.
  • 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. PHP, memcached● Inserindo e obtendo dados do cache:
  • 51. PHP, memcached● Limpando dados do cache:
  • 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. 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. 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. 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. PHP, APC
  • 57. PHP, APC● Interface Administrativa:
  • 58. PHP, APC● Usando APC como cache de dados:
  • 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. 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. PHP, Zend_Cache● Adapters ○ APC ○ Dba ○ Filesystem ○ Memcached ○ Memory ○ WinCache ○ ZendServerDisk ○ ZendServerShm
  • 62. PHP, Zend_Cache● Exemplo de utilização do Zend_Cache
  • 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. 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. 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. 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. 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. PHP, Cloud● Windows Azure ○ Blob Storage ○ Table Service ○ Queue Storage ○ SQL Database ○ SendGrid Email Service ○ ... http://www.windowsazure.com/en-us/develop/php/
  • 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. 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. 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. PHP, Cloud● www.phpcloud.com (Zend Developer Cloud)
  • 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. 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. Obrigado por assistir! Para saber mais:http://dpasqua.wordpress.com douglas.pasqua@gmail.com

×