Download - Tuning Apache MySQL e PHP

Transcript
  • Tuning Apache/MySQL/PHPpara Desenvolvedores

    By Douglas V. PasquaZend Certified Engineer / LPI / SCJP

    [email protected]

  • 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

    [email protected]