SlideShare ist ein Scribd-Unternehmen logo
1 von 75
Downloaden Sie, um offline zu lesen
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.
● 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 processlistG
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
Obrigado por assistir!

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

     douglas.pasqua@gmail.com

Weitere ähnliche Inhalte

Was ist angesagt?

Reduce Storage Costs by 5x Using The New HDFS Tiered Storage Feature
Reduce Storage Costs by 5x Using The New HDFS Tiered Storage Feature Reduce Storage Costs by 5x Using The New HDFS Tiered Storage Feature
Reduce Storage Costs by 5x Using The New HDFS Tiered Storage Feature
DataWorks Summit
 
MySQL Multi-Source Replication for PL2016
MySQL Multi-Source Replication for PL2016MySQL Multi-Source Replication for PL2016
MySQL Multi-Source Replication for PL2016
Wagner Bianchi
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL Administration
Command Prompt., Inc
 

Was ist angesagt? (20)

AF Ceph: Ceph Performance Analysis and Improvement on Flash
AF Ceph: Ceph Performance Analysis and Improvement on FlashAF Ceph: Ceph Performance Analysis and Improvement on Flash
AF Ceph: Ceph Performance Analysis and Improvement on Flash
 
Arquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQLArquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQL
 
Reduce Storage Costs by 5x Using The New HDFS Tiered Storage Feature
Reduce Storage Costs by 5x Using The New HDFS Tiered Storage Feature Reduce Storage Costs by 5x Using The New HDFS Tiered Storage Feature
Reduce Storage Costs by 5x Using The New HDFS Tiered Storage Feature
 
Maxscale switchover, failover, and auto rejoin
Maxscale switchover, failover, and auto rejoinMaxscale switchover, failover, and auto rejoin
Maxscale switchover, failover, and auto rejoin
 
MySQL Multi-Source Replication for PL2016
MySQL Multi-Source Replication for PL2016MySQL Multi-Source Replication for PL2016
MySQL Multi-Source Replication for PL2016
 
Lvm advanced topics
Lvm advanced topicsLvm advanced topics
Lvm advanced topics
 
InnoDB Performance Optimisation
InnoDB Performance OptimisationInnoDB Performance Optimisation
InnoDB Performance Optimisation
 
Proxysql sharding
Proxysql shardingProxysql sharding
Proxysql sharding
 
Troubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming ReplicationTroubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming Replication
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
MariaDB Server Performance Tuning & Optimization
MariaDB Server Performance Tuning & OptimizationMariaDB Server Performance Tuning & Optimization
MariaDB Server Performance Tuning & Optimization
 
MongoDB WiredTiger Internals
MongoDB WiredTiger InternalsMongoDB WiredTiger Internals
MongoDB WiredTiger Internals
 
MongoDB – Sharded cluster tutorial - Percona Europe 2017
MongoDB – Sharded cluster tutorial - Percona Europe 2017MongoDB – Sharded cluster tutorial - Percona Europe 2017
MongoDB – Sharded cluster tutorial - Percona Europe 2017
 
Intro to Redis TimeSeries
Intro to Redis TimeSeriesIntro to Redis TimeSeries
Intro to Redis TimeSeries
 
MongodB Internals
MongodB InternalsMongodB Internals
MongodB Internals
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL Administration
 
Evolution of MySQL Parallel Replication
Evolution of MySQL Parallel Replication Evolution of MySQL Parallel Replication
Evolution of MySQL Parallel Replication
 
Streaming Operational Data with MariaDB MaxScale
Streaming Operational Data with MariaDB MaxScaleStreaming Operational Data with MariaDB MaxScale
Streaming Operational Data with MariaDB MaxScale
 
What is new in MariaDB 10.6?
What is new in MariaDB 10.6?What is new in MariaDB 10.6?
What is new in MariaDB 10.6?
 
Ceph Day Beijing - Ceph All-Flash Array Design Based on NUMA Architecture
Ceph Day Beijing - Ceph All-Flash Array Design Based on NUMA ArchitectureCeph Day Beijing - Ceph All-Flash Array Design Based on NUMA Architecture
Ceph Day Beijing - Ceph All-Flash Array Design Based on NUMA Architecture
 

Andere mochten auch

PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
Sérgio Souza Costa
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com Jenkins
Gilmar Pupo
 
Ws 01-install appserv+xampp+konfigurasi file
Ws 01-install appserv+xampp+konfigurasi fileWs 01-install appserv+xampp+konfigurasi file
Ws 01-install appserv+xampp+konfigurasi file
Wahiduna ElQudsy
 
Artigo benchmark moodle apresentação
Artigo benchmark moodle   apresentaçãoArtigo benchmark moodle   apresentação
Artigo benchmark moodle apresentação
Milton Azara
 
Arquitectura de computadores power point
Arquitectura de computadores power pointArquitectura de computadores power point
Arquitectura de computadores power point
fayl1905
 

Andere mochten auch (20)

Melhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySqlMelhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySql
 
Dicas para aumentar a performance de um software PHP
Dicas para aumentar a performance de um software PHPDicas para aumentar a performance de um software PHP
Dicas para aumentar a performance de um software PHP
 
[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites
[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites
[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao Avançado
 
Frameworks PHP
Frameworks PHPFrameworks PHP
Frameworks PHP
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com Jenkins
 
Funcao PHP
Funcao PHPFuncao PHP
Funcao PHP
 
Ws 01-install appserv+xampp+konfigurasi file
Ws 01-install appserv+xampp+konfigurasi fileWs 01-install appserv+xampp+konfigurasi file
Ws 01-install appserv+xampp+konfigurasi file
 
Princípios de Administração de Dados
Princípios de Administração de DadosPrincípios de Administração de Dados
Princípios de Administração de Dados
 
Artigo benchmark moodle apresentação
Artigo benchmark moodle   apresentaçãoArtigo benchmark moodle   apresentação
Artigo benchmark moodle apresentação
 
Rpm e yum - gerenciamento de pacotes
Rpm e yum - gerenciamento de pacotesRpm e yum - gerenciamento de pacotes
Rpm e yum - gerenciamento de pacotes
 
Manual completo de_html 01
Manual completo de_html 01Manual completo de_html 01
Manual completo de_html 01
 
Arquitectura de computadores power point
Arquitectura de computadores power pointArquitectura de computadores power point
Arquitectura de computadores power point
 
Linux tuning for PostgreSQL at Secon 2015
Linux tuning for PostgreSQL at Secon 2015Linux tuning for PostgreSQL at Secon 2015
Linux tuning for PostgreSQL at Secon 2015
 
Paginas Web
Paginas WebPaginas Web
Paginas Web
 
Inteligência Artificial Reduzindo o Custo na Cobrança
Inteligência Artificial Reduzindo o Custo na CobrançaInteligência Artificial Reduzindo o Custo na Cobrança
Inteligência Artificial Reduzindo o Custo na Cobrança
 
Projeto Nota Fiscal de Serviços Eletrônica NFS-e Montes Claros - MG
Projeto Nota Fiscal de Serviços Eletrônica NFS-e Montes Claros - MGProjeto Nota Fiscal de Serviços Eletrônica NFS-e Montes Claros - MG
Projeto Nota Fiscal de Serviços Eletrônica NFS-e Montes Claros - MG
 
Mecatronica atual 60
Mecatronica atual 60Mecatronica atual 60
Mecatronica atual 60
 
Propaganda e publicidade livro manual criacao_publicitaria
Propaganda e publicidade livro manual criacao_publicitariaPropaganda e publicidade livro manual criacao_publicitaria
Propaganda e publicidade livro manual criacao_publicitaria
 

Ähnlich wie Tuning Apache/MySQL/PHP para desenvolvedores

Cache e Performance (in portuguese)
Cache e Performance (in portuguese)Cache e Performance (in portuguese)
Cache e Performance (in portuguese)
Bruno Pedro
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
elliando dias
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinada
Henrique Lima
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveis
elliando dias
 
Fisl banco de dados no sql de código aberto
Fisl   banco de dados no sql de código abertoFisl   banco de dados no sql de código aberto
Fisl banco de dados no sql de código aberto
Suissa
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
PrinceGuru MS
 

Ähnlich wie Tuning Apache/MySQL/PHP para desenvolvedores (20)

Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
 
Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]
Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]
Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctools
 
Vamos conversar sobre cache
Vamos conversar sobre cacheVamos conversar sobre cache
Vamos conversar sobre cache
 
Cache e Performance (in portuguese)
Cache e Performance (in portuguese)Cache e Performance (in portuguese)
Cache e Performance (in portuguese)
 
Melhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressMelhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPress
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinada
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveis
 
Escalabilidade e alta disponibilidade no php com nginx
Escalabilidade e alta disponibilidade no php com nginxEscalabilidade e alta disponibilidade no php com nginx
Escalabilidade e alta disponibilidade no php com nginx
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?
 
Fisl banco de dados no sql de código aberto
Fisl   banco de dados no sql de código abertoFisl   banco de dados no sql de código aberto
Fisl banco de dados no sql de código aberto
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneos
 
Minicurso GNU/Linux básico - Aula2 - Semana Sistemas de Informação 2015 - UNI...
Minicurso GNU/Linux básico - Aula2 - Semana Sistemas de Informação 2015 - UNI...Minicurso GNU/Linux básico - Aula2 - Semana Sistemas de Informação 2015 - UNI...
Minicurso GNU/Linux básico - Aula2 - Semana Sistemas de Informação 2015 - UNI...
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Vagrant + Puppet
Vagrant + PuppetVagrant + Puppet
Vagrant + Puppet
 
Adequação do servidor Proxy/Cache Squid a redes de extrema carga
Adequação do servidor Proxy/Cache Squid a redes de extrema cargaAdequação do servidor Proxy/Cache Squid a redes de extrema carga
Adequação do servidor Proxy/Cache Squid a redes de extrema carga
 
Desenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveisDesenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveis
 
Alta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxAlta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com Nginx
 

Mehr von Douglas V. Pasqua

Mehr von Douglas V. Pasqua (9)

Graph API - Desenvolvimento para Facebook
Graph API - Desenvolvimento para FacebookGraph API - Desenvolvimento para Facebook
Graph API - Desenvolvimento para Facebook
 
Web Services RESTful
Web Services RESTfulWeb Services RESTful
Web Services RESTful
 
Introdução APIs RESTful
Introdução APIs RESTfulIntrodução APIs RESTful
Introdução APIs RESTful
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php seguros
 
Unicode: Os segredos da Codificação de Caracteres
Unicode: Os segredos da Codificação de CaracteresUnicode: Os segredos da Codificação de Caracteres
Unicode: Os segredos da Codificação de Caracteres
 
The Facebook Plataform
The Facebook PlataformThe Facebook Plataform
The Facebook Plataform
 
Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3
 
Segurança Web com PHP5
Segurança Web com PHP5Segurança Web com PHP5
Segurança Web com PHP5
 

Kürzlich hochgeladen

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Kürzlich hochgeladen (6)

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

Tuning Apache/MySQL/PHP para desenvolvedores

  • 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.
  • 3. Tópicos Apache ● AllowOverride ● mod_status ● SymLinks ● KeepAlive ● MaxClients ● Outras dicas
  • 4. Apache ● AllowOverride ● mod_status ● SymLinks ● KeepAlive ● MaxClients ● Outras Dicas
  • 5. Apache, AllowOverride ● Permite sobrescrever configurações do Apache através dos arquivos .htaccess:
  • 6. Apache, AllowOverride ● Caso habilitado, Apache terá que checar por arquivos .htaccess em todas requisições. ● Sempre que possível, manter desabilitado.
  • 7. Apache, AllowOverride ● Transportar as configurações de .htaccess para o arquivo de configuração principal
  • 8. Apache ● AllowOverride ● ExtendedStatus ● SymLinks ● KeepAlive ● MaxClients ● Outras Dicas
  • 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.
  • 11. Apache, mod_status ● Manter o parâmetro ExtendedStatus para Off, para melhor performance.
  • 12. Apache ● AllowOverride ● mod_status ● SymLinks ● KeepAlive ● MaxClients ● MaxRequestsPerChild ● Outras Dicas
  • 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)
  • 14. Apache ● AllowOverride ● ExtendedStatus ● SymLinks ● KeepAlive ● MaxClients ● MaxRequestsPerChild ● Outras Dicas
  • 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.
  • 17. Apache ● AllowOverride ● ExtendedStatus ● SymLinks ● KeepAlive ● MaxClients ● Outras Dicas
  • 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
  • 20. Apache ● AllowOverride ● ExtendedStatus ● SymLinks ● KeepAlive ● MaxClients ● Outras Dicas
  • 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.
  • 22. MySQL ● Monitorando consultas lentas ● max_connections ● table_cache ● query_cache_size ● thread_cache_size
  • 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
  • 24. 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;
  • 25. MySQL ● Monitorando consultas lentas ● max_connections ● table_cache ● query_cache_size ● thread_cache_size
  • 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.
  • 27. MySQL, max_connections ● Para aumentar o número de conexões simultâneas: [mysqld] ... max_connections = 200
  • 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
  • 29. MySQL ● Monitorando consultas lentas ● max_connections ● table_cache ● query_cache_size ● thread_cache_size
  • 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
  • 32. MySQL ● Monitorando consultas lentas ● max_connections ● table_cache ● query_cache_size ● thread_cache_size
  • 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.
  • 34. MySQL, query_cache_size [mysqld] ... query_cache_size = 128M
  • 35. MySQL ● Monitorando consultas lentas ● max_connections ● table_cache ● query_cache_size ● thread_cache_size
  • 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.
  • 40. MySQL, thread_cache_size Threads_created: 1294 Connections: 7321961 100 - ((1294 / 7321961) * 100) = 99,98%
  • 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
  • 45. PHP, Profiler ● webgrind - https://code.google.com/p/webgrind/ ○ Ferramenta para análise de logs do xdebug profiler ● config.php:
  • 47. 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
  • 48. PHP, memcached ● Sistema de cache de alta perfomance com dados armazenados em memória.
  • 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.
  • 50. PHP, memcached ● Inserindo e obtendo dados do cache:
  • 51. PHP, memcached ● Limpando dados do cache:
  • 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
  • 57. PHP, APC ● Interface Administrativa:
  • 58. PHP, APC ● Usando APC como cache de dados:
  • 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.
  • 61. PHP, Zend_Cache ● Adapters ○ APC ○ Dba ○ Filesystem ○ Memcached ○ Memory ○ WinCache ○ ZendServerDisk ○ ZendServerShm
  • 62. PHP, Zend_Cache ● Exemplo de utilização do Zend_Cache
  • 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
  • 67. 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/
  • 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
  • 72. PHP, Cloud ● www.phpcloud.com (Zend Developer Cloud)
  • 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