Otimizando Servidores Web De Alta Demanda Dissertação De Mestrado
Total Page:16
File Type:pdf, Size:1020Kb
Otimizando Servidores Web de Alta Demanda Renato Hirata Dissertação de Mestrado 1 N! p AI Instituto de Computação Universidade Estadual de Campinas Otimizando Servidores Web de Alta Demanda Renato Hirata Abril de 2002 Banca Examinadora: • Prof. Dr. Paulo Lício de Geus (Orientador) Instituto de Computação, UNICAMP • Prof. Dr. Adriano Mauro Cansian IBILCE, UNESP • Prof. Dr. Rogério Drummond Instituto de Computação, UNICAMP • Prof. Dr. Célio Cardoso Guimarães (Suplente) Instituto de Computação, UNICAMP Ia CM00171050-6 Ficha Catalográfica elaborada pela Biblioteca do IMECC da UNICAMP Hirata, Renato H613o Otimizando Servidores Web de alta demanda I Renato Hirata. -Campinas, SP: [s.n.l, 2002. Orientador: Paulo Lício de Geus. Dissertação (mestrado) - Universidade Estadual de Campinas, Instituto de Computação. 1. Redes de computação - Administração. 2. Desempenho 3. Internet (Redes de computadores). 4. Redes de computação - Protocolos. 5. UNIX (Sistema operacional de computador) - Otimização. 6. TCP/IP (Protocolos de redes de computação) 7. World Wide Web (Sistema de Recuperação de Informação). I. Geus, Paulo Lício de. li. Universidade Estadual de Campinas. Instituto de Computação. Ill. Título 11 TERMO DE APROVAÇÃO Tese defendida e aprovada em 11 de abril de 2002, pela Banca Examinadora composta pelos Professores Doutores: Prof. Dr. Adriano Mauro Cansian IBILCE - Unesp Prof. Dr. Rogério Drum IC- UNICAMP Prof. Dr. Paulo Lício deGeUS IC- UNICAMP 111 Otimizando Servidores Web de Alta Demanda Este exemplar corresponde à redação final da Dis sertação devidamente corrigida e defendida por Renato Hirata e aprovada pela Banca Examinadora. Campinas, 11 de Abril de 2002 d 7- Paulo Ucio de Geus (Orientador) Dissertação apresentada ao Instituto de Com putação, UNIC&I\I!P, como requisito parcial para a obtenção do título de Mestre em Ciência da Com putação. IV © Renato Hirata, 2002. Todos os direitos reservados. v Resumo Com o explosivo crescimento da Web, sua popularização e sua grande importãncia como meio de comunicação global, cada vez mais a atenção se volta para questões de desempenho. Pelo fato de ser um serviço relativamente recente, são poucos os estudos que abordam de modo geral todos os fatores que influenciam no seu desempenho e como tais fatores estão inter-relaciona dos. Assim, o objetivo deste trabalho é abordar o problema de desempenho na Web como um todo, levantando e analisando todos os componentes relacionados, fornecendo embasamento teórico para o entendimento desses tópicos e apresentando suas possíveis soluções, de forma a cobrir esta lacuna na bibliografia existente. Em especial, se concentra em tópicos de software na porção servidora de sistemas de grande demanda. Como resultado, o leitor encontrará um texto único na otimização servidores de grande porte, que é um trabalho de referência e ao mesmo tempo um guia de otimização1 L Este trabalho foi desenvolvido junto à Comissão de Vestibulares da Universidade Estadual de Campinas e seus resultados utilizados para a implementação do site de alta demanda desta instituição. vi Abstract With the Web explosive growth, its popularization and its great importance as a way of global communication , more and more attention is devoted to its performance issues. Due to the Web being a relatively new service, very few works approach the issue of performance affecting fac tors in a broad sense, as well as their inter-relationship. The goal of this work is to fill that gap by enumerating and analysing every component that affects Web performance. This is done by covering theoretical issues for a clear understanding of ali topics involved and by presenting pos sible solutions and suggestions. The main focus of this work is on the server portion of high per formance systems. As a result, the reader will find a unique text on optimizing performance of very large Web sites, that is both a reference work and a tuning guide1 1. This work was developed with the support of the "Vestibular" Comission of the State University of Campinas, and its results were used to implement the high demanding site of this institution. vii Dedico aos meus pais, e minha avó em memória, as pessoas que mais me ajudaram em todos os sentidos, fornecendo algo mais importante que o conhecimento técnico, mas o conhecimento da vida, representado em atos concretos de amor, humildade, caráter e respeito ao próximo. viii Agradecimentos Ao professor Paulo Lício de Geus, por toda orientação para o desenvolvimento deste trabalho. À minha avó, Joana, que não pôde estar presente "fisicamente" agora, mas sempre esteve e estará em memória e espírito. Aos meus pais, Francisco e Hideko, por tudo. Aos parentes próximos, em especial minhas tias, Luzia, Rogéria, Ana e Cida, e meu tio Gabriel, por todo o apoio em minha estadia em Campinas. Aos meus irmãos, José Carlos, Margarete, Flávio e Caio, distantes, mas presentes. À Liliane, pelo apoio e compreensão. Ao pequeno Sávio, pela inspiração. Aos meus amigos, que sempre me apoiaram e acreditaram na realização deste trabalho. À Comissão Permanente para os Vestibulares da Unicamp, por todo suporte e amizade. Ao Centro de Computação da Unicamp, em especial ao Fábio Mengue, pelo apoio. A Deus, pela oportunidade de realização de mais este importante passo em minha vida. ix Conteúdo 1 Introdução e Motivações 21 2 O Sistema Operacional 25 2.1 O Unix ........................................................ 26 2.1.1 Histórico ................................................. 26 2.1.2 Sabores de Unix ............................................ 27 2.1.2.1 Linux ............................................. 28 2.1.2.2 BSD .............................................. 28 2.1.2.3 Solaris ............................................. 28 2.1.2.4 Digital Unix ......................................... 29 2.1.2.5 Irix ............................................... 29 2.1.2.6 Mach OS ........................................... 29 2.1.2.7 HP-UX ............................................ 29 2.1.3 O UNIX como servidor TCP/IP ................................. 29 2.2 O Linux ....................................................... 30 2.2.1 Características Gerais ........................................ 30 2.2.2 Controle de versões do Linux .................................. 31 2.2.3 Por que o Linux? . 31 2.3 O Kemel ....................................................... 32 2.3.1 Definição ................................................. 32 2.3.2 Modos de execução e as System Calls ............................ 32 2.3.3 Arquitetura de kemels ........................................ 33 2.4 Otimizando o kemel do Linux . 34 2.4.1 Compilação otímizada ........................................ 35 2.4.1.1 Configurando o novo kemel ............................ 35 2.4.1.2 A Compilação ....................................... 38 2.4.1.3 Configurando o LILO .................................. 38 2.4.2 Configurando parâmetros do kernel .............................. 41 2.4.2.1 Estrutura do /proc .................................... 41 2.4.2.2 Alterando parâmetros: /proc/sys .......................... 45 2.4.2.3 Estrutura do /proc/sys ................................ 46 2.5 Processos e Threads . 46 2.5.1 Conceitos ................................................. 47 2.5.1.1 Escalonamento ................................. 47 2.5.1.2 Preemptividade ................................. 47 2.5.1.3 Criação de Processos .................................. 47 xi 2.5.2 Threads .................................................. 48 2.5.2.1 Definição . ........ 48 2.5.2.2 Forma de implementação do pacote de threads .............. 49 2.5.2.3 Suporte a threads no Linux ............................. 50 2.5.2.4 Implementação do kernel via threads ...................... 51 2.5.3 Otimizações possíveis . .................... 52 2.6 Sistema de Arquivos . 53 2.6.1 Implementação de Sistema de Arquivos ........................... 54 2.6.1.1 Bloco ............................................. 54 2.6.1.2 Superbloco ......................................... 56 2.6.1.3 Inode ............................................. 56 2.6.1.4 Diretórios .......................................... 57 2.6.1.5 Descritor de Arquivo . ........................ 59 2.6.2 Manutenção de Sistema de Arquivos ............................. 60 2.6.2.1 Desfragmentação de Discos ......................... 60 2.6.2.2 Particionamento Adequado . 61 2.6.2.3 Evitando o registro de último acesso de leitura ............... 62 2.6.2.4 Evitar o uso de links simbólicos .......................... 63 2.6.2.5 Otimizar as variáveis de PATH ........................... 63 2.6.2.6 Evitar "-user" . 64 2.6.3 Cache de Disco ............................................. 64 2.6.3.1 Tamanho do Buffer ................................... 64 2.6.3.2 Atualização em Disco ................................. 65 2.6.3.3 Flushing de buffers no Linux (kernel 2.4) ................... 66 2.6.3.4 Evitando o cache: Raw Devices .......................... 68 2.6.4 Otimizando acesso a discos IDE no Linux via hdparm ................ 68 2.6.4.1 Exibindo configuraçoes e desempenho atuais ................ 69 2.6.4.2 Habilitando o DMA ................................... 70 2.6.4.3 Habilitando transferências de 32 bits ...................... 70 2.6.4.4 Habilitando a transferência de múltiplos setores por interrupção .. 71 2.7 Gerenciamento de memória ......................................... 71 2.7.1 Funções do Gerenciador de memória ............................ 71 2.7.2 Como a memória é utilizada ..................................