Você está na página 1de 75

Tuning Apache/MySQL/PHP

para Desenvolvedores
By Douglas V. Pasqua
Zend Certified Engineer / LPI / SCJP
douglas.pasqua@gmail.com

Objetivos
Dicas de Tuning para Apache/MySQL e PHP.
Parmetros de configurao para tuning de Apache e MySQL
Instalao e configurao de ferramentas de tuning.
Anlise de cdigos PHP.
Identifcar Gargalos.
Voltado para desenvolvedores.

Tpicos Apache
AllowOverride
mod_status
SymLinks
KeepAlive
MaxClients
Outras dicas

Apache
AllowOverride
mod_status
SymLinks
KeepAlive
MaxClients
Outras Dicas

Apache, AllowOverride
Permite sobrescrever configuraes do Apache atravs dos
arquivos .htaccess:

Apache, AllowOverride
Caso habilitado, Apache ter que checar por arquivos .htaccess em
todas requisies.
Sempre que possvel, manter desabilitado.

Apache, AllowOverride
Transportar as configuraes de .htaccess para o arquivo de
configurao principal

Apache
AllowOverride
ExtendedStatus
SymLinks
KeepAlive
MaxClients
Outras Dicas

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.

Apache, mod_status

Apache, mod_status
Manter o parmetro ExtendedStatus para Off, para melhor
performance.

Apache
AllowOverride
mod_status
SymLinks
KeepAlive
MaxClients
MaxRequestsPerChild
Outras Dicas

Apache, SymLinks
Diz ao Apache para seguir/no seguir links simblicos.
Manter desabilitado faz com que o Apache realize checagens
extras. (verificando se o arquivo acessado um link ou no)

Apache
AllowOverride
ExtendedStatus
SymLinks
KeepAlive
MaxClients
MaxRequestsPerChild
Outras Dicas

Apache, KeepAlive
KeepAlive.
Permite mltiplas requisies por uma mesma conexo TCP
Melhora desempenho do site.
Reduz utilizao de CPU.
Aumenta consumo de memria.

Apache, KeepAlive

Apache
AllowOverride
ExtendedStatus
SymLinks
KeepAlive
MaxClients
Outras Dicas

Apache, MaxClients
Determina o limite mximo de conexes simultneas no Apache.
Aumentar tambm o ServerLimit quando > 256
Padro 256
Setar antes de MaxClients

Apache, MaxClients
MaxClients (RAM - memria outros processos)
/ (mdia do processo apache)

RAM
6109184 Kb (free -m)
Mdia de Memria do Apache
12000kb (ps -ylC apache2 --sort:rss)
Reservar memria para outros processos
819200kb
MaxClients = (6109184 - 819200) / 12000
MaxClients = 441

Apache
AllowOverride
ExtendedStatus
SymLinks
KeepAlive
MaxClients
Outras Dicas

Apache, Outras Dicas


mod_deflate
Habilita compresso de dados.
Ideal para arquivos estticos (html, css, javascript, xml, etc.)
Maioria dos navegadores modernos suportam nativamente.
Separar contedo esttico de contedo dinmico.
Usar um servidor Http mais leve para contedo esttico.

MySQL
Monitorando consultas lentas
max_connections
table_cache
query_cache_size
thread_cache_size

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

MySQL, Consultas Lentas


Exemplo de Log /var/log/mysql-slow.log:
# Time: 110406 17:00:00
# Query_time: 9 Lock_time: 0 Rows_sent: 1
Rows_examined: 5643851
select count(*) from backuplog;

MySQL
Monitorando consultas lentas
max_connections
table_cache
query_cache_size
thread_cache_size

MySQL, max_connections
Determina o nmero mximo de conexes simultneas no MySQL.
Aumentar de acordo com a necessidade.
Receber Too many connections significa que excedeu esse
limite.
Aumentar esse parmetro influncia:
Quantidade de Memria disponvel.
Quantidade de memria usada por cada conexo.
Nmero de file descriptors abertos.

MySQL, max_connections
Para aumentar o nmero de conexes simultneas:
[mysqld]
...
max_connections = 200

MySQL, max_connections
Para aumentar o nmero de conexes simultneas:
[mysqld]
...
max_connections = 200

Para diagnsticos das conexes em processo no momento:


mysql> show processlist\G

MySQL
Monitorando consultas lentas
max_connections
table_cache
query_cache_size
thread_cache_size

MySQL, table_cache
Toda vez que o MySQL abre uma tabela, coloca ela em cache.
table_cache define o nmero de tabelas abertas em cache para
todas threads.
Est diretamente relacionado com o parmetro max_connections:
table_cache = max_connections * n

n o nmero mximo de tabelas usadas na query em que voc


possui mais Joins no sistema.

MySQL, table_cache
table_cache limitado pelo nmero de file descriptors disponiveis
pelo S.O.
Utiliza mais memria, porm melhora a performance.
Lembre-se que precisa reservar extra file descriptors para tabelas
temporrias e arquivos.
Verificar nmero de file descriptors do S.O. (Linux):
# cat /proc/sys/fs/file-max
# lsof -p $(pidof mysqld) | wc -l

MySQL
Monitorando consultas lentas
max_connections
table_cache
query_cache_size
thread_cache_size

MySQL, query_cache_size
Quantidade de memria alocada para guardar resultado das queries.
Por padro o valor 0 (Desabilitado).
Os valores para esse parmetro devem ser mltiplos de 1024.
Cuidado para no setar para um valor muito alto. As threads
precisam fazer lock no cache durante updates.
O valor mnimo 40Kb, para alocao das estruturas.

MySQL, query_cache_size
[mysqld]
...
query_cache_size = 128M

MySQL
Monitorando consultas lentas
max_connections
table_cache
query_cache_size
thread_cache_size

MySQL, thread_cache_size
Quantidade de threads em cache. (Conexes persistentes).
Diminuir o mximo possvel a criao de novas threads.
Equao para testar a eficincia do cache:
100 - ((Threads_created / Connections) * 100) = 99%

MySQL, thread_cache_size
Equao para testar a eficincia do cache:
100 - ((Threads_created / Connections) * 100)
Threads_created
Nmero de Threads criadas desde que o MySQL foi iniciado.
Connections
Nmero total de conexes desde que o MySQL foi iniciado.

MySQL, thread_cache_size
Threads_created

Threads_created: 1294

MySQL, thread_cache_size
Connections:

Connections: 7321961

MySQL, thread_cache_size
Threads_created: 1294
Connections: 7321961
100 - ((1294 / 7321961) * 100) = 99,98%

PHP
Identificando gargalos em aplicao PHP
memcached
Opes de aceleradores de cdigo php
Usando APC (Alternative PHP Cache)
Caching com Zend_Cache
PHP e Computao em Nuvem

PHP, Profiler
O Profiler do xdebug permite identificar gargalhos e/ou partes mais
lentas de sua aplicao.
Ideal para saber em quais pontos voc pode melhor o desempenho.

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

PHP, Profiler

PHP, Profiler
webgrind - https://code.google.com/p/webgrind/
Ferramenta para anlise de logs do xdebug profiler
config.php:

PHP, Profiler

PHP
Identificando gargalos em aplicao PHP
memcached
Opes de aceleradores de cdigo php
Usando APC (Alternative PHP Cache)
Caching com Zend_Cache
PHP e Computao em Nuvem

PHP, memcached
Sistema de cache de alta perfomance com dados armazenados em
memria.

PHP, memcached
Sistema de cache de alta perfomance com dados armazenados em
memria.
Principal propsito:
Diminuir a carga em banco de dados de aplicaes web.
Instalvel atravs de uma extenso PECL.

PHP, memcached
Inserindo e obtendo dados do cache:

PHP, memcached
Limpando dados do cache:

PHP
Identificando gargalos em aplicao PHP
memcached
Opes de aceleradores de cdigo php
Usando APC (Alternative PHP Cache)
Caching com Zend_Cache
PHP e Computao em Nuvem

PHP, aceleradores de cdigo


APC - Alternative PHP Cache.
Ideal para WebServers muito carregados e aplicaes com
muitos componentes.
Software Livre
Mantido pelos desenvolvedores do core do PHP.
Distribudo atravs de um pacote PECL.
Previso para estar integrado junto com o PHP verso 5.4
Compatibilidade com Zend Optimizer
Fcil administrao
Suporte para Windows
Suporte para PHP 5.4

PHP, aceleradores de cdigo


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
Opo comercial

PHP
Identificando gargalos em aplicao PHP
memcached
Opes de aceleradores de cdigo php
Usando APC (Alternative PHP Cache)
Caching com Zend_Cache
PHP e Computao em Nuvem

PHP, APC

PHP, APC
Interface Administrativa:

PHP, APC
Usando APC como cache de dados:

PHP
Identificando gargalos em aplicao PHP
memcached
Opes de aceleradores de cdigo php
Usando APC (Alternative PHP Cache)
Caching com Zend_Cache
PHP e Computao em Nuvem

PHP, Zend_Cache
Classe de Cache distribudo junto com o Zend Framework.
Pode ser utilizado como Stand Alone ou junto com o MVC.
Prov uma forma genrica de realizar cache de dados.

PHP, Zend_Cache
Adapters
APC
Dba
Filesystem
Memcached
Memory
WinCache
ZendServerDisk
ZendServerShm

PHP, Zend_Cache
Exemplo de utilizao do Zend_Cache

PHP
Identificando gargalos em aplicao PHP
memcached
Opes de aceleradores de cdigo php
Usando APC (Alternative PHP Cache)
Caching com Zend_Cache
PHP e Computao em Nuvem

PHP, Cloud
IaaS (Infrastructure-as-a-Service)
Infraestrutura (Recursos) so contratados como servio.
rede, armazenamento, memria, cpu, etc.
Alta escalabilidade.
Sistema de monitoramento avanado.
Sistemas IaaS mais conhecidos:
EC2 Amazon
IBM SmartCloud

PHP, Cloud
PaaS (Plataforme-as-a-Service)
Plataforma para criao, hospedagem e controle de Software.
Fcil Escalabilidade.
No se preocupe mais com administrao de infraestrutura.
Segurana Integrada.
Sistemas PaaS mais conhecidos:
Google AppEngine
Force.com
Zend Developer Cloud

PHP, Cloud
SaaS (Software-as-a-Service).
No se preocupe mais com instalao de software
Software utilizado 100% via Web.
No h aquisio de licenas.
Pague somente pela utilizao do servio.
Disponibiliza API para integraes externas.
Sistemas SaaS mais conhecidos:
Google Docs
Gmail
Hotmail

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/

PHP, Cloud
Windows Azure
Blob Storage
Table Service
Queue Storage
SQL Database
SendGrid Email Service
...
http://www.windowsazure.com/en-us/develop/php/

PHP, Cloud
www.phpcloud.com (Zend Developer Cloud)
O que ?
Ambiente para rodar aplicaes em php na Nuvem.
Criado pela prpria Zend.
Ambiente PaaS.
Infraestrutura interna usando Zend Server.
Elstico
Fcil escalabilidade.
Permite que voc aumente ou diminui recursos conforme
necessidade.

PHP, Cloud
www.phpcloud.com (Zend Developer Cloud)
Rpido
Ambiente otimizado para diminuir tempo de resposta de
requisies.
Acelerador de cdigo.
Cache de bytecode.
Cache de dados.
Cache total de pginas.

PHP, Cloud
www.phpcloud.com (Zend Developer Cloud)
Seguro
Alta disponibilidade.
Monitorao de Aplicao.
Hot Fixes.
Plataformas
RightScale
Amazon
Rackspace
IBM SmartCloud

PHP, Cloud
www.phpcloud.com (Zend Developer Cloud)

PHP, Cloud
Simple Cloud API
Interface comum para diversos servios de aplicaes em cloud.
Distribudo junto com Zend Framework.
File Storage
Amazon S3.
Table Storage Windows Azure.
Cloud Storage Nirvanix
Rackspace

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

Obrigado por assistir!


Para saber mais:
http://dpasqua.wordpress.com
douglas.pasqua@gmail.com

Você também pode gostar