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