Performance Java Flávia Falcão | [email protected] Roteiro • • • • • • • Motivação Objetivos Garbage Collection Parser Codificação Java Conclusao Referencias Motivação • Web está em todo lugar : – – – – • E-marketplaces E-comerce B2B automatizado Interegracao de processos de negocio na web Compartilahamento de recursos , computacao distribuida Necessidade de plataforma que permita interações aplicação-a-aplicação sistemática na web : – FOCO Tecnologia web services, escopo é o projeto CENAS Problema : A performance dessas aplicações Objetivos • • Identificar os fatores que influenciam o desempenho das aplicações j2ee e web services • JVM Tunning • XML Parser Boas práticas para codificação de aplicações em JAVA, com ênfase em WebServices Garbage Collection • A performance de uma aplicação está intimamente ligada ao custo da alocação e desalocação de memória. Se uma aplicação usa uma quantidade de memória tal que força o sistema operacional a usar memória virtual, esta aplicação sofrerá um impacto na performance Tempo de Vida dos Objetos • A maioria dos objetos tem um curto tempo de vida: – 80-98% dos objetos alocados morrem em menos de poucos milhões de instruções. – 80-98% dos objetos alocados morrem antes de outro megabyte ter sido alocado. • • Isto tem grande impacto da escolha do algoritmo de Garbage Collection Definir o perfil de execução de uma aplicação, Isso é difícil !!! Generacional GC • Divide a heap em múltiplas áreas ( gerações) – – – – Objetos segregados por idade Objetos novos morrem mais frequentemente,GC mais freqüente Em Gerações mais velhas as coletas são menos freqüentes Diferentes gerações usam diferentes algoritmos Fatores que afetam o GC • • Taxa de objetos criados Vida dos objetos – Temporários,intermediários,longos • Tipo do objeto – Tamanho, complexidade • Relacionamento entre objetos – Dificuldade de determinar e traçar as referencias dos objetos Atividades Realizadas • Analisar os principais algoritmos geracionais do garbage Collection da jvm 1.4.2 – – – – – • Copyng GC Mark sweep GC Parallel GC Concurrent mark sweep GC Incremental GC Mecanismos disponiveis para otimizar seu desempenho – Analise do comportamento da Heap da jvm Maquina Virtual JAVA • • A HotSpot VM otimiza o gerenciamento de memória por idades (generational). O heap da maquina virtual é dividida em young generation e old gereration e permanent generation de acordo com a idade do objeto Maquina Virtual JAVA • • Na Young generation estão os objetos considerados com tempo de curto relativo a um intervalo de coletas. A young generation é dividida em 3 espacos : – um eden – dois espaços “Survivor”(to-space e from-space). – As alocações acontecem do eden para o from-space.Quando estes estão preenchidos a coleta na Young generation é feita. – Geralmente a young generation é muito menor em relação ao tamanho da heap.Isto leva a pequenas mas freqüentes pausas na young generation durante a execução do garbage collection. Maquina Virtual JAVA • • • Objetos que sobreviventes a um determinado numero de coletas são movidos(promovidos) para a old generation. A old generation é geralmente maior em relação a Young o que leva a pausas maiores e menos freqüentes . A permanent generation é usada para armazenar classes de objetos e meta dados relacionados. Maquina Virtual JAVA Maquina Virtual JAVA • Parâmetros da JVM • • • -XX:NewSize -XX:MaxNewSize -XX:SurvivorRatio • Automaticamente – XX:+UseAdaptativeSize Maquina Virtual JAVA • Como exemplo, para uma Yung generation com 128Mb, Eden de 64Mb, SemiSpace 32MB, Os parametros devem ser java -Xms512m -Xmx512m \ -XX:NewSize=128m -XX:MaxNewSize=128m \ -XX:SurvivorRatio=2 application Maquina Virtual JAVA A otimização da utilização destas áreas juntamente com a escolha correta do algorítimo do garbage collector pode gerar um aumento de performance considerável Maquina Virtual JAVA • Nas J2Ses o algoritmo default da Young generation é o copyng collector já na old generation o algoritmo padrão é o mark-compact collector. Maquina Virtual JAVA Algorítimos • Parallel Collector que é implementado na young generation.Este Coletor usa a versão paralela da young generation coletor.(copyng colector). Deve ser usado quando se deseja melhorar o desempenho da aplicação em maquinas com vários processadores. – -XX:+UseParNewGC , -XX:+UseParallelGC, - XX:ParallelGCThreads=n Maquina Virtual JAVA Algorítimos • Concurrent mark sweep Collector é implementado na old generation.Tenta minimizar as pausas fazendo a maioria da coleta simultaneamente com as threads da aplicação . – -XX :UseConcMarkSweepGC Cases 1 Cases • • Teste com a aplicação J2EE PetStore Desafios – Analisar o comportamento dos algorítimos e mensurar a performance deles em maquinas multiprocessadas – Realizar um estudo sobre dimensionamento do HEAP Requisições Respondidas Cases 16000 14000 12000 Default 10000 8000 NewParGC 6000 ParallelGC 4000 ConcMarkSweep 2000 0 1 2 4 6 8 10 12 14 Numero de Usuarios 16 18 20 Cases 16000 14000 10000 8000 requests 6000 16000 4000 14000 2000 12000 0 10000 8000 2 Requests 3 4 5 8 newSurvivor 6000 4000 2000 16000 0 14000 2 3 4 5 New Ratio 8 14 20 Requisicoes Requisicoes requisicoes 12000 12000 10000 8000 Requests 6000 4000 2000 0 2 3 4 5 New Ratio 8 14 20 Cases 2 Cases • • Testes na aplicação portal consul Desafios – Realizar testes na aplicação do desenvolvida pelo CESAR analisando • Variação do servidor de aplicação • Variação da JVM • Utilização de macanismos de cache Cases Requisições atendidas Requisições atendidas x Versão da JVM 40 35 30 25 20 15 10 5 0 JVM 1.3 JVM 1.4 5 10 15 20 25 Número de usuários 30 35 Cases Websphere 4.0 Tomcat 15 25 40 35 30 25 20 15 10 5 0 5 10 20 30 35 Cases websphere 4.0 Tomcat sem alteração Tomcat + Cache 350 Requests/seg 300 250 200 150 100 50 0 5 10 15 20 25 Usuários simultâneos 30 35 Cases 3 Cases • • Testes na aplicação da Meantime para a globo.com Desafios – A aplicação deveria ser capaz de atender 350.000 requisições em 1 hora (97.2 req/seg) – A equipe do projeot partiu das premissas: • Popar o SGBD ($$$$$) • Maximizar Cache Cases Users Requests/Seg 10 USERS 10 MINUTOS 20 USERS 10 MINUTOS 20 USERS 1 HORA 2/3 VOTIND 1/3 SYNC 20 USERS 1 HORA VOTING 108.13 141.31 115.05 118.64 Case Web services : Problemas • • XML é o coração da tecnologia web services. Problemas : – – – – – Tamanho dos arquivos xml Marshalling e un-marshaling Tipo de dado Transmissao de mensagens SOAP Validação Marshalling e Un-marshaling : Parser XML • O tempo de conversão de documentos XML durante o processo de comunicação, pode significar um grande gargalo no sistema quando se refere à performance do envio e recebimento de um serviço. Case • • Testes realizados com Parsers Xml/Java de diferentes fabricantes. Desafios: – Realizar testes em aplicação analisando o comportamento de cada um dos parsers – Mensurar e comparar o desempenho deles Case Codificação Java • • A maneira com que se escreve um código pode ter um impacto no desempenho de um sistema. Inúmeros partes similares de código podem ter desempenhos radicalmente diferentes.. Como os que seguem… Exemplos (1) • Concatenação de strings String str = “teste” + “já” + “va”; internamente é : String str = new StringBuffer().append(“teste”).append(“ja”).append(“va”)..toString(); JSP Servlets Web Services Referencias Perguntas?