tunando sua aplicação lnmp

Download Tunando sua aplicação LNMP

If you can't read please download the document

Upload: leandro-mendes

Post on 24-May-2015

335 views

Category:

Technology


15 download

DESCRIPTION

Apresentação no DAFITI Tech Day 2014.

TRANSCRIPT

  • 1. Tunando sua aplicao LNMP

2. Sobre os palestrantes Leandro Mendes Formado em Redes de Computadores pela Oswaldo CruzAtua em TI desde 1998Administrando Linux boxes desde 2000Imitador oficial do Silvio Santos 3. LNMP??? 4. LNMP???Acrnimo para: Linux, NGINX, MySQL e PHP! 5. LNMP??? Linux - dispensa apresentaes, 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) 6. Por que NGINX? 7. Por que NGINX? Tem uma BELA lista de features ( http://nginx.org/en/)MultiplataformaEvent-drivenExtensvel atravs modulos (ngx_lua e ngx_pagespeed, por exemplo)FastCGI,wsgiRpido! Mas muito rpido! 8. Mas e o APACHE? 9. Mas e o APACHE? Eu gosto do APACHE! O conceito do MPM interessante: Prefork, Worker, EventO php s funciona (direito) com o PreforkEm alguns benchmarks se mostra mais rpido que o NGINX+php-fpm, mas nunca vi na prtica... extensvel tambm atravs de mdulos apxs.Comparar NGINX e APACHE como comparar uma TV de tubo com uma de LED. 10. APACHENGINX 11. PHP-FPM 12. PHP-FPM Alternativa ao php-fcgi e mod_php no apacheMultiprocessoAuto escalvel (evil!)Ideal para webservers como NGINX e Lighttpd Integrado rvore do projeto PHP 13. Problemas comuns 14. Problemas comuns Lentido para acesso ou drops de conexo, sendo que: Baixssimo consumo de CPUConsumo de IO nfimoMemria disponvelBaixo consumo de redeveja seus logs! obviamente tem algo errado! 15. Problemas comuns Algumas possibilidades: Keepalive habilitadoBaixo nmero de acceptorsNmero baixo de workers do webserver/php-fpmLimite de open filesip_conntracklocal_port_rangePermisso no filesystem (que coisa!)Performance do banco de dadosNetwork stuff (DNS, Link, ativos de rede problemticos, etc.)Aplicao! 16. Fine-tuning! 17. Fine-tuning Linux max_open_files: Pode ser ajustar via ulimit -n 8192, ouPra servidores, de 8192 pra cima! Via /etc/security/limits.confip_conntrack: Se puder desabilitar, melhor Caso no, deixar o mximo possvel, ex: sysctl net.ipv4.netfilter.ip_conntrack_max=65535local_port_range sysctl -w net.ipv4.ip_local_port_range="9000 65535 18. Fine-tuning Linux DNS cache (dnsmasq)Ajuste do TIME_WAIT para conexes expirarem net.ipv4.tcp_tw_recycle = 5 net.ipv4.tcp_tw_reuse = 2Dica! Red Hat tuning manual: http://people.redhat.com/alikins/system_tuning.html 19. Fine-tuning NGINX worker_connections: nmero de acceptors. Um bom nmero, entre 512 e 1024. Mais que isso s se muito necessrio.multi_accept: onkeepalive_timeout: 0 (diferente de zero, somente em casos especficos, onde keepalive mandatrio)worker_process: 1 para cada core fsico (core, no thread)Verifique se h necessidade de gerar logs de acesso. Um disco de log local lento pode fazer sua aplicao ficar lenta.Dica! Habilitar a compactao gzip ajuda a economizar uso de rede! Procure fazer cache de pginas j renderizadas para economizar processamento! 20. Fine-tuning PHP-FPM pm.start_servers: Pode variar. O ideal selecionar um nmero como 100 (ou 200) e acompanhar como est a criao de novos childrenspm.max_children: nmero mximo de acceptors do NGINXpm.max_requests: O seu valor do max_children o limite aqui.Dicas: Efetuar code caching, com PHP APC!Use o mdulo proxy_cache do NGINX para evitar processamento desnecessrio, cacheando pginas menos volteis. 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 no Oracle. Quanto maior do seu datafile ibdata1, pior.Discos SSD so legais, mas caros. Um RAID10 de pelo menos 6 discos resolve.Tune suas queries. 90% dos seus problemas esto 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% mdioMuitos hits no banco de dadosInfra muito enxutaQueries repetidas, queries problemticas e sem cacheSoluo Virtualizao (escalando horizontalmente uso mdio de CPU em 20%)CDN externo e cacheSomente INSERTS, UPDATES de DELETES no Master. SELECTS nos SlavesAplicao: Removendo queries duplicadas, tuning de queries e aumentando a abrangncia do cache (Cache do MySQL e Memcache)Load balancers everywhere! Aumentando a disponibilidade dos servios consumidos pelo frontend. 24. Dvidas? 25. Bibliografia NGINX Wiki: http://wiki.nginx.org/MainThe C10K Problem: http://www.kegel.com/c10k.htmlRed Hat tuning manual: http://people.redhat.com/alikins/system_tuning.html Apache MPM Modules Worker vs Prefork: http://kb.parallels.com/en/113007Medindo a Black-Friday 2013: http://ale.biancalanas.net/trac-ale/wiki/Medindo-a-BlackFriday-2013 26. Leandro Mendes [email protected] @theflockers linkedin.com/theflockers github.com/theflockers