SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Tunando sua aplicação LNMP
Sobre os palestrantes
●

Leandro Mendes
–

Formado em Redes de Computadores pela
Oswaldo Cruz

–

Atua em TI desde 1998

–

Administrando Linux boxes desde 2000

–

Imitador oficial do Silvio Santos
LNMP???
LNMP???

Acrônimo para:
Linux, NGINX, MySQL e PHP!
LNMP???
●

Linux - dispensa apresentações, certo?

●

NGINX (Engine X)
–

●

●

Em conjunto com outros webservers, foi
criado para resolver o “C10k problem” (
http://www.kegel.com/c10k.html)

MySQL
PHP – php-fpm (FastCGI Process
Manager)
Por que NGINX?
Por que NGINX?
●

Tem uma BELA lista de features (
http://nginx.org/en/)

●

Multiplataforma

●

Event-driven

●

Extensível através modulos (ngx_lua e
ngx_pagespeed, por exemplo)

●

FastCGI,wsgi

●

Rápido! Mas muito rápido!
Mas e o APACHE?
Mas e o APACHE?
●

Eu gosto do APACHE!
–

O conceito do MPM é interessante:
●

Prefork, Worker, Event

●

O php só funciona (direito) com o Prefork

●

–

Em alguns benchmarks se mostra mais rápido que o
NGINX+php-fpm, mas nunca vi na prática...

É extensível também através de módulos apxs.

Comparar NGINX e APACHE é como comparar
uma TV de tubo com uma de LED.
APACHE

NGINX
PHP-FPM
PHP-FPM
●

Alternativa ao php-fcgi e mod_php
no apache

●

Multiprocesso

●

Auto escalável (evil!)

●

●

Ideal para webservers como NGINX e
Lighttpd
Integrado à árvore do projeto PHP
Problemas comuns
Problemas comuns
●

Lentidão para acesso ou drops de conexão,
sendo que:
–

Baixíssimo consumo de CPU

–

Consumo de IO ínfimo

–

Memória disponível

–

Baixo consumo de rede

veja seus logs! obviamente tem algo
errado!
Problemas comuns
●

Algumas possibilidades:
–

Keepalive habilitado

–

Baixo número de “acceptors”

–

Número baixo de “workers” do webserver/php-fpm

–

Limite de “open files”

–

ip_conntrack

–

local_port_range

–

Permissão no filesystem (que coisa!)

–

Performance do banco de dados

–

Network stuff (DNS, Link, ativos de rede problemáticos, etc.)

–

Aplicação!
Fine-tuning!
Fine-tuning
●

Linux
–

max_open_files:
●

●

Pode ser ajustar via ulimit -n 8192, ou

●

–

Pra servidores, de 8192 pra cima!
Via /etc/security/limits.conf

ip_conntrack:
●

●

–

Se puder desabilitar, melhor
Caso não, deixar o máximo possível, ex:
sysctl net.ipv4.netfilter.ip_conntrack_max=65535

local_port_range
●

sysctl -w net.ipv4.ip_local_port_range="9000 65535”
Fine-tuning
●

Linux
–

DNS cache (dnsmasq)

–

Ajuste do TIME_WAIT para conexões expirarem
●

●

●

net.ipv4.tcp_tw_recycle = 5
net.ipv4.tcp_tw_reuse = 2

Dica!
–

Red Hat tuning manual:
http://people.redhat.com/alikins/system_tuning.html
Fine-tuning
●

NGINX
–
–

worker_connections: número de acceptors. Um bom número, entre 512 e
1024. Mais que isso só se muito necessário.

–

multi_accept: on

–

keepalive_timeout: 0 (diferente de zero, somente em casos específicos, onde
keepalive é mandatório)

–

●

worker_process: 1 para cada core físico (core, não thread)

Verifique se há necessidade de gerar logs de acesso. Um disco de log local
lento pode fazer sua aplicação ficar lenta.

Dica!
–
–

●

Habilitar a compactação gzip ajuda a economizar uso de rede!
Procure fazer cache de páginas já renderizadas para economizar
processamento!
Fine-tuning
●

PHP-FPM
–
–

pm.start_servers: Pode variar. O ideal é selecionar um número como 100
(ou 200) e acompanhar como está a criação de novos “childrens”

–

●

pm.max_children: número máximo de “acceptors” do NGINX

pm.max_requests: O seu valor do max_children é o limite aqui.

Dicas:
–

Efetuar code caching, com PHP APC!

–

Use o módulo proxy_cache do NGINX para evitar processamento
desnecessário, cacheando páginas menos voláteis.
Fine-tuning
●

MySQL (no ponto de vista de infra-estrutura)
–

max_connections
●

–

Depende da quantidade de acessos, perfil de hardware.

Innodb-per-file-table
●

MySQL é da Oracle mas não é Oracle. Quanto maior do seu datafile
ibdata1, pior.

–

Discos SSD são legais, mas caros. Um RAID10 de pelo menos 6
discos resolve.

–

Tune suas queries. 90% dos seus problemas estão aí.

Bom Disk IO para banco de dados é fundamental! Disco
SATA 7.2k é o “fim da picada”.
Mundo real – Black Friday
Mundo real – Black Friday
●

Pontos pendentes:
–
–

Uso de CPU em 60% médio

–

Muitos hits no banco de dados

–

●

Infra muito enxuta

Queries repetidas, queries problemáticas e sem cache

Solução
–

Virtualização (escalando horizontalmente uso médio de CPU em 20%)

–

CDN externo e cache

–

Somente INSERTS, UPDATES de DELETES no Master. SELECTS nos Slaves

–

Aplicação: Removendo queries duplicadas, tuning de queries e aumentando a
abrangência do cache (Cache do MySQL e Memcache)

–

Load balancers everywhere! Aumentando a disponibilidade dos serviços
consumidos pelo frontend.
Dúvidas?
Bibliografia
●

NGINX Wiki: http://wiki.nginx.org/Main

●

The C10K Problem: http://www.kegel.com/c10k.html

●

●

●

Red Hat tuning manual:
http://people.redhat.com/alikins/system_tuning.html
Apache MPM Modules Worker vs Prefork:
http://kb.parallels.com/en/113007

Medindo a Black-Friday 2013:
http://ale.biancalanas.net/trac-ale/wiki/Medindo-a-BlackFriday-2013
Leandro Mendes
leandro.mendes@dafiti.com.br
@theflockers
linkedin.com/theflockers
github.com/theflockers

Weitere ähnliche Inhalte

Was ist angesagt?

NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.Filipe Morelli
 
Alta Performance com Java
Alta Performance com JavaAlta Performance com Java
Alta Performance com JavaAlisson Pedrina
 
Gerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanGerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanJuliano Atanazio
 
Um milhao tdc2014sp Apresentação por Fernando Ike
Um milhao tdc2014sp Apresentação por Fernando IkeUm milhao tdc2014sp Apresentação por Fernando Ike
Um milhao tdc2014sp Apresentação por Fernando IkePaulo Fernandes
 
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?Marcelo Dieder
 
Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?Pablo Souza
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLDiego Santos
 
Node.js, Uma breve introdução
Node.js, Uma breve introduçãoNode.js, Uma breve introdução
Node.js, Uma breve introduçãoPablo Feijó
 
O que é nodejs, cases e vantagens
O que é nodejs, cases e vantagensO que é nodejs, cases e vantagens
O que é nodejs, cases e vantagensRodrigo Matheus
 
Apresentação Multimídia - Unifesp - VP9
Apresentação Multimídia - Unifesp - VP9Apresentação Multimídia - Unifesp - VP9
Apresentação Multimídia - Unifesp - VP9Henrique Genovês
 
TDC2016POA | Trilha Python - Heimdall Guard - Spam Filter
TDC2016POA | Trilha Python - Heimdall Guard - Spam FilterTDC2016POA | Trilha Python - Heimdall Guard - Spam Filter
TDC2016POA | Trilha Python - Heimdall Guard - Spam Filtertdc-globalcode
 
Douglasesteves meetupzabbix
Douglasesteves meetupzabbixDouglasesteves meetupzabbix
Douglasesteves meetupzabbixDouglas Esteves
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarFilipe Falcão
 
Integração de Sistemas usando tecnologias open source
Integração de Sistemas usando tecnologias open sourceIntegração de Sistemas usando tecnologias open source
Integração de Sistemas usando tecnologias open sourceTiago Peczenyj
 

Was ist angesagt? (20)

NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.
 
Por que Node JS?
Por que Node JS?Por que Node JS?
Por que Node JS?
 
Replicação PostgreSQL com RepManager
Replicação PostgreSQL com RepManagerReplicação PostgreSQL com RepManager
Replicação PostgreSQL com RepManager
 
Alta Performance com Java
Alta Performance com JavaAlta Performance com Java
Alta Performance com Java
 
Gerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanGerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarman
 
Um milhao tdc2014sp Apresentação por Fernando Ike
Um milhao tdc2014sp Apresentação por Fernando IkeUm milhao tdc2014sp Apresentação por Fernando Ike
Um milhao tdc2014sp Apresentação por Fernando Ike
 
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?
 
Php WatchDog
Php WatchDogPhp WatchDog
Php WatchDog
 
Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?
 
Introdução ao Nodejs
Introdução ao NodejsIntrodução ao Nodejs
Introdução ao Nodejs
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQL
 
Node.js, Uma breve introdução
Node.js, Uma breve introduçãoNode.js, Uma breve introdução
Node.js, Uma breve introdução
 
O que é nodejs, cases e vantagens
O que é nodejs, cases e vantagensO que é nodejs, cases e vantagens
O que é nodejs, cases e vantagens
 
Zabbix 3 0-cinfotec
Zabbix 3 0-cinfotecZabbix 3 0-cinfotec
Zabbix 3 0-cinfotec
 
Apresentação Multimídia - Unifesp - VP9
Apresentação Multimídia - Unifesp - VP9Apresentação Multimídia - Unifesp - VP9
Apresentação Multimídia - Unifesp - VP9
 
TDC2016POA | Trilha Python - Heimdall Guard - Spam Filter
TDC2016POA | Trilha Python - Heimdall Guard - Spam FilterTDC2016POA | Trilha Python - Heimdall Guard - Spam Filter
TDC2016POA | Trilha Python - Heimdall Guard - Spam Filter
 
Douglasesteves meetupzabbix
Douglasesteves meetupzabbixDouglasesteves meetupzabbix
Douglasesteves meetupzabbix
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizar
 
Performance Web com ASP.NET MVC
Performance Web com ASP.NET MVCPerformance Web com ASP.NET MVC
Performance Web com ASP.NET MVC
 
Integração de Sistemas usando tecnologias open source
Integração de Sistemas usando tecnologias open sourceIntegração de Sistemas usando tecnologias open source
Integração de Sistemas usando tecnologias open source
 

Andere mochten auch

Open ldap linuxcon_working
Open ldap linuxcon_workingOpen ldap linuxcon_working
Open ldap linuxcon_workingLeandro Mendes
 
Mit Den Augen Eines Wolfes
Mit Den Augen Eines WolfesMit Den Augen Eines Wolfes
Mit Den Augen Eines Wolfesguestb233da9
 
Iris Scott Finger Painter - Dogs!
Iris Scott Finger Painter -  Dogs!Iris Scott Finger Painter -  Dogs!
Iris Scott Finger Painter - Dogs!marciaadelman
 
Ferienzeit - Katalog des Jugendwerks der AWO 2012
Ferienzeit - Katalog des Jugendwerks der AWO 2012Ferienzeit - Katalog des Jugendwerks der AWO 2012
Ferienzeit - Katalog des Jugendwerks der AWO 2012Chris Le
 
Bildungsbilanz, Forschungsbilanz, Wissensbilanz
Bildungsbilanz, Forschungsbilanz, WissensbilanzBildungsbilanz, Forschungsbilanz, Wissensbilanz
Bildungsbilanz, Forschungsbilanz, Wissensbilanzheiko.vogl
 
Biosynthèse des Acides Gras
Biosynthèse des Acides Gras Biosynthèse des Acides Gras
Biosynthèse des Acides Gras Salim Rachidi
 
G t-a-w the process
G t-a-w the processG t-a-w the process
G t-a-w the processJack Gillson
 
SCREEN-TYPES - Deutschlandweite Typologie für Mobile Digital Devices
SCREEN-TYPES - Deutschlandweite Typologie für Mobile Digital DevicesSCREEN-TYPES - Deutschlandweite Typologie für Mobile Digital Devices
SCREEN-TYPES - Deutschlandweite Typologie für Mobile Digital DevicesAxel Springer Marktforschung
 
Spanisch Vortrag
Spanisch VortragSpanisch Vortrag
Spanisch Vortragguest43dbf7
 
Profile im Netz & Google Authorship
Profile im Netz & Google AuthorshipProfile im Netz & Google Authorship
Profile im Netz & Google AuthorshipKixka Nebraska
 
Comman presentation
Comman presentationComman presentation
Comman presentationyatradham
 

Andere mochten auch (20)

Infra tricks
Infra tricksInfra tricks
Infra tricks
 
Open ldap linuxcon_working
Open ldap linuxcon_workingOpen ldap linuxcon_working
Open ldap linuxcon_working
 
Mit Den Augen Eines Wolfes
Mit Den Augen Eines WolfesMit Den Augen Eines Wolfes
Mit Den Augen Eines Wolfes
 
Deflex Profiles
Deflex ProfilesDeflex Profiles
Deflex Profiles
 
Test
TestTest
Test
 
Test2
Test2Test2
Test2
 
Iris Scott Finger Painter - Dogs!
Iris Scott Finger Painter -  Dogs!Iris Scott Finger Painter -  Dogs!
Iris Scott Finger Painter - Dogs!
 
Ferienzeit - Katalog des Jugendwerks der AWO 2012
Ferienzeit - Katalog des Jugendwerks der AWO 2012Ferienzeit - Katalog des Jugendwerks der AWO 2012
Ferienzeit - Katalog des Jugendwerks der AWO 2012
 
press-release.pdf
press-release.pdfpress-release.pdf
press-release.pdf
 
Hd sjournal 20111
Hd sjournal 20111Hd sjournal 20111
Hd sjournal 20111
 
Bildungsbilanz, Forschungsbilanz, Wissensbilanz
Bildungsbilanz, Forschungsbilanz, WissensbilanzBildungsbilanz, Forschungsbilanz, Wissensbilanz
Bildungsbilanz, Forschungsbilanz, Wissensbilanz
 
Biosynthèse des Acides Gras
Biosynthèse des Acides Gras Biosynthèse des Acides Gras
Biosynthèse des Acides Gras
 
G t-a-w the process
G t-a-w the processG t-a-w the process
G t-a-w the process
 
SCREEN-TYPES - Deutschlandweite Typologie für Mobile Digital Devices
SCREEN-TYPES - Deutschlandweite Typologie für Mobile Digital DevicesSCREEN-TYPES - Deutschlandweite Typologie für Mobile Digital Devices
SCREEN-TYPES - Deutschlandweite Typologie für Mobile Digital Devices
 
PM1_Fine2010neu.pdf
PM1_Fine2010neu.pdfPM1_Fine2010neu.pdf
PM1_Fine2010neu.pdf
 
THE NATURE OF THE WORLD
THE NATURE OF THE WORLD THE NATURE OF THE WORLD
THE NATURE OF THE WORLD
 
Spanisch Vortrag
Spanisch VortragSpanisch Vortrag
Spanisch Vortrag
 
Police Catalogue
Police CataloguePolice Catalogue
Police Catalogue
 
Profile im Netz & Google Authorship
Profile im Netz & Google AuthorshipProfile im Netz & Google Authorship
Profile im Netz & Google Authorship
 
Comman presentation
Comman presentationComman presentation
Comman presentation
 

Ähnlich wie Tunando sua aplicação LNMP

Descobrindo o Nginx - Um servidor web de alta performance
Descobrindo o Nginx - Um servidor web de alta performanceDescobrindo o Nginx - Um servidor web de alta performance
Descobrindo o Nginx - Um servidor web de alta performanceGustavo Ciello
 
Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?
Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?
Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?Paulo Vital
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
Instalando e mantendo o zabbix com ansible
Instalando e mantendo o zabbix com ansibleInstalando e mantendo o zabbix com ansible
Instalando e mantendo o zabbix com ansibleRodrigo Lira
 
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 disciplinadaHenrique Lima
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?tdc-globalcode
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresDouglas V. Pasqua
 
Web Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheWeb Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheDell Technologies
 
Linux e zephyr conversando no mesmo SoC
Linux e zephyr conversando no mesmo SoCLinux e zephyr conversando no mesmo SoC
Linux e zephyr conversando no mesmo SoCEmbarcados
 
Oficina de PHP - Software Freedom Day Luziânia 2013
Oficina de PHP - Software Freedom Day Luziânia 2013Oficina de PHP - Software Freedom Day Luziânia 2013
Oficina de PHP - Software Freedom Day Luziânia 2013George Mendonça
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
PHP, Gearman e Memcache
PHP, Gearman e MemcachePHP, Gearman e Memcache
PHP, Gearman e MemcacheAndre Golvea
 
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âneosFernando Ike
 
Petic Emgetis Final
Petic Emgetis FinalPetic Emgetis Final
Petic Emgetis Finalnetimba
 
Faça seu portal voar usando o plone.app.caching
Faça seu portal voar usando o plone.app.cachingFaça seu portal voar usando o plone.app.caching
Faça seu portal voar usando o plone.app.cachingFabiano Weimar
 
Escalabilidade em Aplicações - Fisl13
Escalabilidade em Aplicações - Fisl13Escalabilidade em Aplicações - Fisl13
Escalabilidade em Aplicações - Fisl13Flavio Torres
 
Google App Engine e PHP
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHPLuiz Messias
 
Monitoramento Enterprise com Zabbix+RHEL
Monitoramento Enterprise com Zabbix+RHELMonitoramento Enterprise com Zabbix+RHEL
Monitoramento Enterprise com Zabbix+RHELAlessandro Silva
 

Ähnlich wie Tunando sua aplicação LNMP (20)

Descobrindo o Nginx - Um servidor web de alta performance
Descobrindo o Nginx - Um servidor web de alta performanceDescobrindo o Nginx - Um servidor web de alta performance
Descobrindo o Nginx - Um servidor web de alta performance
 
Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?
Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?
Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Instalando e mantendo o zabbix com ansible
Instalando e mantendo o zabbix com ansibleInstalando e mantendo o zabbix com ansible
Instalando e mantendo o zabbix com ansible
 
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
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedores
 
Web Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheWeb Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+Apache
 
Consegi 2011: Ganeti + Puppet
Consegi 2011: Ganeti + PuppetConsegi 2011: Ganeti + Puppet
Consegi 2011: Ganeti + Puppet
 
Linux e zephyr conversando no mesmo SoC
Linux e zephyr conversando no mesmo SoCLinux e zephyr conversando no mesmo SoC
Linux e zephyr conversando no mesmo SoC
 
Oficina de PHP - Software Freedom Day Luziânia 2013
Oficina de PHP - Software Freedom Day Luziânia 2013Oficina de PHP - Software Freedom Day Luziânia 2013
Oficina de PHP - Software Freedom Day Luziânia 2013
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
PHP, Gearman e Memcache
PHP, Gearman e MemcachePHP, Gearman e Memcache
PHP, Gearman e Memcache
 
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
 
Petic Emgetis Final
Petic Emgetis FinalPetic Emgetis Final
Petic Emgetis Final
 
Faça seu portal voar usando o plone.app.caching
Faça seu portal voar usando o plone.app.cachingFaça seu portal voar usando o plone.app.caching
Faça seu portal voar usando o plone.app.caching
 
Escalabilidade em Aplicações - Fisl13
Escalabilidade em Aplicações - Fisl13Escalabilidade em Aplicações - Fisl13
Escalabilidade em Aplicações - Fisl13
 
Google App Engine e PHP
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHP
 
Monitoramento Enterprise com Zabbix+RHEL
Monitoramento Enterprise com Zabbix+RHELMonitoramento Enterprise com Zabbix+RHEL
Monitoramento Enterprise com Zabbix+RHEL
 
De 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuáriosDe 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuários
 

Tunando sua aplicação LNMP

  • 2. Sobre os palestrantes ● Leandro Mendes – Formado em Redes de Computadores pela Oswaldo Cruz – Atua em TI desde 1998 – Administrando Linux boxes desde 2000 – Imitador oficial do Silvio Santos
  • 5. LNMP??? ● Linux - dispensa apresentações, certo? ● NGINX (Engine X) – ● ● Em conjunto com outros webservers, foi criado para resolver o “C10k problem” ( http://www.kegel.com/c10k.html) MySQL PHP – php-fpm (FastCGI Process Manager)
  • 7. Por que NGINX? ● Tem uma BELA lista de features ( http://nginx.org/en/) ● Multiplataforma ● Event-driven ● Extensível através modulos (ngx_lua e ngx_pagespeed, por exemplo) ● FastCGI,wsgi ● Rápido! Mas muito rápido!
  • 8. Mas e o APACHE?
  • 9. Mas e o APACHE? ● Eu gosto do APACHE! – O conceito do MPM é interessante: ● Prefork, Worker, Event ● O php só funciona (direito) com o Prefork ● – Em alguns benchmarks se mostra mais rápido que o NGINX+php-fpm, mas nunca vi na prática... É extensível também através de módulos apxs. Comparar NGINX e APACHE é como comparar uma TV de tubo com uma de LED.
  • 12. PHP-FPM ● Alternativa ao php-fcgi e mod_php no apache ● Multiprocesso ● Auto escalável (evil!) ● ● Ideal para webservers como NGINX e Lighttpd Integrado à árvore do projeto PHP
  • 14. Problemas comuns ● Lentidão para acesso ou drops de conexão, sendo que: – Baixíssimo consumo de CPU – Consumo de IO ínfimo – Memória disponível – Baixo consumo de rede veja seus logs! obviamente tem algo errado!
  • 15. Problemas comuns ● Algumas possibilidades: – Keepalive habilitado – Baixo número de “acceptors” – Número baixo de “workers” do webserver/php-fpm – Limite de “open files” – ip_conntrack – local_port_range – Permissão no filesystem (que coisa!) – Performance do banco de dados – Network stuff (DNS, Link, ativos de rede problemáticos, etc.) – Aplicação!
  • 17. Fine-tuning ● Linux – max_open_files: ● ● Pode ser ajustar via ulimit -n 8192, ou ● – Pra servidores, de 8192 pra cima! Via /etc/security/limits.conf ip_conntrack: ● ● – Se puder desabilitar, melhor Caso não, deixar o máximo possível, ex: sysctl net.ipv4.netfilter.ip_conntrack_max=65535 local_port_range ● sysctl -w net.ipv4.ip_local_port_range="9000 65535”
  • 18. Fine-tuning ● Linux – DNS cache (dnsmasq) – Ajuste do TIME_WAIT para conexões expirarem ● ● ● net.ipv4.tcp_tw_recycle = 5 net.ipv4.tcp_tw_reuse = 2 Dica! – Red Hat tuning manual: http://people.redhat.com/alikins/system_tuning.html
  • 19. Fine-tuning ● NGINX – – worker_connections: número de acceptors. Um bom número, entre 512 e 1024. Mais que isso só se muito necessário. – multi_accept: on – keepalive_timeout: 0 (diferente de zero, somente em casos específicos, onde keepalive é mandatório) – ● worker_process: 1 para cada core físico (core, não thread) Verifique se há necessidade de gerar logs de acesso. Um disco de log local lento pode fazer sua aplicação ficar lenta. Dica! – – ● Habilitar a compactação gzip ajuda a economizar uso de rede! Procure fazer cache de páginas já renderizadas para economizar processamento!
  • 20. Fine-tuning ● PHP-FPM – – pm.start_servers: Pode variar. O ideal é selecionar um número como 100 (ou 200) e acompanhar como está a criação de novos “childrens” – ● pm.max_children: número máximo de “acceptors” do NGINX pm.max_requests: O seu valor do max_children é o limite aqui. Dicas: – Efetuar code caching, com PHP APC! – Use o módulo proxy_cache do NGINX para evitar processamento desnecessário, cacheando páginas menos voláteis.
  • 21. Fine-tuning ● MySQL (no ponto de vista de infra-estrutura) – max_connections ● – Depende da quantidade de acessos, perfil de hardware. Innodb-per-file-table ● MySQL é da Oracle mas não é Oracle. Quanto maior do seu datafile ibdata1, pior. – Discos SSD são legais, mas caros. Um RAID10 de pelo menos 6 discos resolve. – Tune suas queries. 90% dos seus problemas estão aí. Bom Disk IO para banco de dados é fundamental! Disco SATA 7.2k é o “fim da picada”.
  • 22. Mundo real – Black Friday
  • 23. Mundo real – Black Friday ● Pontos pendentes: – – Uso de CPU em 60% médio – Muitos hits no banco de dados – ● Infra muito enxuta Queries repetidas, queries problemáticas e sem cache Solução – Virtualização (escalando horizontalmente uso médio de CPU em 20%) – CDN externo e cache – Somente INSERTS, UPDATES de DELETES no Master. SELECTS nos Slaves – Aplicação: Removendo queries duplicadas, tuning de queries e aumentando a abrangência do cache (Cache do MySQL e Memcache) – Load balancers everywhere! Aumentando a disponibilidade dos serviços consumidos pelo frontend.
  • 24.
  • 26. Bibliografia ● NGINX Wiki: http://wiki.nginx.org/Main ● The C10K Problem: http://www.kegel.com/c10k.html ● ● ● Red Hat tuning manual: http://people.redhat.com/alikins/system_tuning.html Apache MPM Modules Worker vs Prefork: http://kb.parallels.com/en/113007 Medindo a Black-Friday 2013: http://ale.biancalanas.net/trac-ale/wiki/Medindo-a-BlackFriday-2013