para desenvolvedores tuning apache/mysql/php€¦ · mysql, max_connections determina o número...
TRANSCRIPT
Tuning Apache/MySQL/PHPpara Desenvolvedores
By Douglas V. PasquaZend Certified Engineer / LPI / SCJP
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.
Tópicos Apache
● AllowOverride● mod_status● SymLinks● KeepAlive● MaxClients ● Outras dicas
Apache
● AllowOverride● mod_status● SymLinks● KeepAlive● MaxClients ● Outras Dicas
Apache, AllowOverride
● Permite sobrescrever configurações do Apache através dos arquivos .htaccess:
Apache, AllowOverride
● Caso habilitado, Apache terá que checar por arquivos .htaccess em todas requisições.
● Sempre que possível, manter desabilitado.
Apache, AllowOverride
● Transportar as configurações de .htaccess para o arquivo de configuração 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 parâmetro ExtendedStatus para Off, para melhor performance.
Apache
● AllowOverride● mod_status● SymLinks● KeepAlive● MaxClients ● MaxRequestsPerChild● Outras Dicas
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)
Apache
● AllowOverride● ExtendedStatus ● SymLinks● KeepAlive● MaxClients ● MaxRequestsPerChild● Outras Dicas
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.
Apache, KeepAlive
Apache
● AllowOverride● ExtendedStatus ● SymLinks● KeepAlive● MaxClients ● Outras Dicas
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
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
Apache
● AllowOverride● ExtendedStatus ● SymLinks● KeepAlive● MaxClients ● Outras Dicas
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.
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 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.
MySQL, max_connections
● Para aumentar o número de conexões simultâneas: [mysqld] ... max_connections = 200
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
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 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.
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
MySQL
● Monitorando consultas lentas● max_connections● table_cache● query_cache_size● thread_cache_size
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.
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. (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%
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.
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 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
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.
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 análise de logs do xdebug profiler
● config.php:
PHP, Profiler
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
PHP, memcached
● Sistema de cache de alta perfomance com dados armazenados em memória.
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.
PHP, memcached
● Inserindo e obtendo dados do cache:
PHP, memcached
● Limpando dados do cache:
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
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
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
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
PHP, APC
PHP, APC
● Interface Administrativa:
PHP, APC
● Usando APC como cache de dados:
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
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.
PHP, Zend_Cache
● Adapters○ APC○ Dba○ Filesystem○ Memcached○ Memory○ WinCache○ ZendServerDisk○ ZendServerShm
PHP, Zend_Cache
● Exemplo de utilização do Zend_Cache
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
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
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
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
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 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.
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.
PHP, Cloud
● www.phpcloud.com (Zend Developer Cloud)
● Seguro○ Alta disponibilidade.○ Monitoração de Aplicação. ○ 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 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
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