Top Banner
Tuning Apache/MySQL/PHP para Desenvolvedores By Douglas V. Pasqua Zend Certified Engineer / LPI / SCJP [email protected]
75

Tuning Apache/MySQL/PHP para desenvolvedores

Apr 29, 2015

Download

Technology

Douglas Pasqua

Slides of talk presented in PHP Conference Brazil 2012. Many simple tips about tuning of Apache, PHP and MySQL. Enjoy!
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Tuning Apache/MySQL/PHP para desenvolvedores

Tuning Apache/MySQL/PHPpara Desenvolvedores

By Douglas V. PasquaZend Certified Engineer / LPI / SCJP

[email protected]

Page 2: Tuning Apache/MySQL/PHP para desenvolvedores

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.

Page 3: Tuning Apache/MySQL/PHP para desenvolvedores

Tópicos Apache

● AllowOverride● mod_status● SymLinks● KeepAlive● MaxClients ● Outras dicas

Page 4: Tuning Apache/MySQL/PHP para desenvolvedores

Apache

● AllowOverride● mod_status● SymLinks● KeepAlive● MaxClients ● Outras Dicas

Page 5: Tuning Apache/MySQL/PHP para desenvolvedores

Apache, AllowOverride

● Permite sobrescrever configurações do Apache através dos arquivos .htaccess:

Page 6: Tuning Apache/MySQL/PHP para desenvolvedores

Apache, AllowOverride

● Caso habilitado, Apache terá que checar por arquivos .htaccess em todas requisições.

● Sempre que possível, manter desabilitado.

Page 7: Tuning Apache/MySQL/PHP para desenvolvedores

Apache, AllowOverride

● Transportar as configurações de .htaccess para o arquivo de configuração principal

Page 8: Tuning Apache/MySQL/PHP para desenvolvedores

Apache

● AllowOverride● ExtendedStatus ● SymLinks● KeepAlive● MaxClients ● Outras Dicas

Page 9: Tuning Apache/MySQL/PHP para desenvolvedores

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.

Page 10: Tuning Apache/MySQL/PHP para desenvolvedores

Apache, mod_status

Page 11: Tuning Apache/MySQL/PHP para desenvolvedores

Apache, mod_status

● Manter o parâmetro ExtendedStatus para Off, para melhor performance.

Page 12: Tuning Apache/MySQL/PHP para desenvolvedores

Apache

● AllowOverride● mod_status● SymLinks● KeepAlive● MaxClients ● MaxRequestsPerChild● Outras Dicas

Page 13: Tuning Apache/MySQL/PHP para desenvolvedores

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)

Page 14: Tuning Apache/MySQL/PHP para desenvolvedores

Apache

● AllowOverride● ExtendedStatus ● SymLinks● KeepAlive● MaxClients ● MaxRequestsPerChild● Outras Dicas

Page 15: Tuning Apache/MySQL/PHP para desenvolvedores

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.

Page 16: Tuning Apache/MySQL/PHP para desenvolvedores

Apache, KeepAlive

Page 17: Tuning Apache/MySQL/PHP para desenvolvedores

Apache

● AllowOverride● ExtendedStatus ● SymLinks● KeepAlive● MaxClients ● Outras Dicas

Page 18: Tuning Apache/MySQL/PHP para desenvolvedores

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

Page 19: Tuning Apache/MySQL/PHP para desenvolvedores

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

Page 20: Tuning Apache/MySQL/PHP para desenvolvedores

Apache

● AllowOverride● ExtendedStatus ● SymLinks● KeepAlive● MaxClients ● Outras Dicas

Page 21: Tuning Apache/MySQL/PHP para desenvolvedores

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.

Page 22: Tuning Apache/MySQL/PHP para desenvolvedores

MySQL

● Monitorando consultas lentas● max_connections● table_cache● query_cache_size● thread_cache_size

Page 23: Tuning Apache/MySQL/PHP para desenvolvedores

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

Page 24: Tuning Apache/MySQL/PHP para desenvolvedores

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;

Page 25: Tuning Apache/MySQL/PHP para desenvolvedores

MySQL

● Monitorando consultas lentas● max_connections● table_cache● query_cache_size● thread_cache_size

Page 26: Tuning Apache/MySQL/PHP para desenvolvedores

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.

Page 27: Tuning Apache/MySQL/PHP para desenvolvedores

MySQL, max_connections

● Para aumentar o número de conexões simultâneas: [mysqld] ... max_connections = 200

Page 28: Tuning Apache/MySQL/PHP para desenvolvedores

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 processlist\G

Page 29: Tuning Apache/MySQL/PHP para desenvolvedores

MySQL

● Monitorando consultas lentas● max_connections● table_cache● query_cache_size● thread_cache_size

Page 30: Tuning Apache/MySQL/PHP para desenvolvedores

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.

Page 31: Tuning Apache/MySQL/PHP para desenvolvedores

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

Page 32: Tuning Apache/MySQL/PHP para desenvolvedores

MySQL

● Monitorando consultas lentas● max_connections● table_cache● query_cache_size● thread_cache_size

Page 33: Tuning Apache/MySQL/PHP para desenvolvedores

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.

Page 34: Tuning Apache/MySQL/PHP para desenvolvedores

MySQL, query_cache_size

[mysqld] ... query_cache_size = 128M

Page 35: Tuning Apache/MySQL/PHP para desenvolvedores

MySQL

● Monitorando consultas lentas● max_connections● table_cache● query_cache_size● thread_cache_size

Page 36: Tuning Apache/MySQL/PHP para desenvolvedores

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%

Page 37: Tuning Apache/MySQL/PHP para desenvolvedores

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.

Page 38: Tuning Apache/MySQL/PHP para desenvolvedores

MySQL, thread_cache_size

Threads_created

Threads_created: 1294

Page 39: Tuning Apache/MySQL/PHP para desenvolvedores

MySQL, thread_cache_size

Connections:

Connections: 7321961

Page 40: Tuning Apache/MySQL/PHP para desenvolvedores

MySQL, thread_cache_size

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

Page 41: Tuning Apache/MySQL/PHP para desenvolvedores

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

Page 42: Tuning Apache/MySQL/PHP para desenvolvedores

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.

Page 43: Tuning Apache/MySQL/PHP para desenvolvedores

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

Page 44: Tuning Apache/MySQL/PHP para desenvolvedores

PHP, Profiler

Page 45: Tuning Apache/MySQL/PHP para desenvolvedores

PHP, Profiler

● webgrind - https://code.google.com/p/webgrind/○ Ferramenta para análise de logs do xdebug profiler

● config.php:

Page 46: Tuning Apache/MySQL/PHP para desenvolvedores

PHP, Profiler

Page 47: Tuning Apache/MySQL/PHP para desenvolvedores

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

Page 48: Tuning Apache/MySQL/PHP para desenvolvedores

PHP, memcached

● Sistema de cache de alta perfomance com dados armazenados em memória.

Page 49: Tuning Apache/MySQL/PHP para desenvolvedores

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.

Page 50: Tuning Apache/MySQL/PHP para desenvolvedores

PHP, memcached

● Inserindo e obtendo dados do cache:

Page 51: Tuning Apache/MySQL/PHP para desenvolvedores

PHP, memcached

● Limpando dados do cache:

Page 52: Tuning Apache/MySQL/PHP para desenvolvedores

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

Page 53: Tuning Apache/MySQL/PHP para desenvolvedores

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

Page 54: Tuning Apache/MySQL/PHP para desenvolvedores

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

Page 55: Tuning Apache/MySQL/PHP para desenvolvedores

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

Page 56: Tuning Apache/MySQL/PHP para desenvolvedores

PHP, APC

Page 57: Tuning Apache/MySQL/PHP para desenvolvedores

PHP, APC

● Interface Administrativa:

Page 58: Tuning Apache/MySQL/PHP para desenvolvedores

PHP, APC

● Usando APC como cache de dados:

Page 59: Tuning Apache/MySQL/PHP para desenvolvedores

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

Page 60: Tuning Apache/MySQL/PHP para desenvolvedores

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.

Page 61: Tuning Apache/MySQL/PHP para desenvolvedores

PHP, Zend_Cache

● Adapters○ APC○ Dba○ Filesystem○ Memcached○ Memory○ WinCache○ ZendServerDisk○ ZendServerShm

Page 62: Tuning Apache/MySQL/PHP para desenvolvedores

PHP, Zend_Cache

● Exemplo de utilização do Zend_Cache

Page 63: Tuning Apache/MySQL/PHP para desenvolvedores

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

Page 64: Tuning Apache/MySQL/PHP para desenvolvedores

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

Page 65: Tuning Apache/MySQL/PHP para desenvolvedores

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

Page 66: Tuning Apache/MySQL/PHP para desenvolvedores

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

Page 67: Tuning Apache/MySQL/PHP para desenvolvedores

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/

Page 68: Tuning Apache/MySQL/PHP para desenvolvedores

PHP, Cloud

● Windows Azure○ Blob Storage○ Table Service○ Queue Storage○ SQL Database○ SendGrid Email Service○ ...

http://www.windowsazure.com/en-us/develop/php/

Page 69: Tuning Apache/MySQL/PHP para desenvolvedores

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.

Page 70: Tuning Apache/MySQL/PHP para desenvolvedores

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.

Page 71: Tuning Apache/MySQL/PHP para desenvolvedores

PHP, Cloud

● www.phpcloud.com (Zend Developer Cloud)

● Seguro○ Alta disponibilidade.○ Monitoração de Aplicação. ○ Hot Fixes.

● Plataformas○ RightScale○ Amazon○ Rackspace○ IBM SmartCloud

Page 72: Tuning Apache/MySQL/PHP para desenvolvedores

PHP, Cloud

● www.phpcloud.com (Zend Developer Cloud)

Page 73: Tuning Apache/MySQL/PHP para desenvolvedores

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

Page 74: Tuning Apache/MySQL/PHP para desenvolvedores

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

Page 75: Tuning Apache/MySQL/PHP para desenvolvedores

Obrigado por assistir!

Para saber mais:http://dpasqua.wordpress.com

[email protected]