O documento fornece dicas sobre como otimizar o desempenho de aplicações PHP em Apache e MySQL. Aborda tópicos como configuração do Apache e MySQL para melhor desempenho, ferramentas de análise de código PHP, uso de caches como APC e memcached, e implementação de aplicações PHP na nuvem.
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.
6. Apache, AllowOverride
● Caso habilitado, Apache terá que checar por arquivos .htaccess em
todas requisições.
● Sempre que possível, manter desabilitado.
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.
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)
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.
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)
● RAM
6109184 Kb (free -m)
● Média de Memória do Apache
12000kb (ps -ylC apache2 --sort:rss)
● Reservar memória para outros processos
819200kb
MaxClients = (6109184 - 819200) / 12000
MaxClients = 441
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.
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 = 1
log_slow_queries = /var/log/mysql-slow.log
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.
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
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
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.
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.
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.so
xdebug.profiler_enable = 1
xdebug.profiler_output_dir = /log/xdebug
● Finalizando:
$ sudo chown www-data /log/xdebug
$ sudo service apache2 restart
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.
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
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.
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
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
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