Performance em Java

Embed Size (px)

DESCRIPTION

Palestra efetuada por Claudio Miranda no evento Conexão Java 2007http://www.claudius.com.br

Citation preview

  • 1. Performance em Aplicaes Java Claudio Miranda Summa Technologies Conexo Java 2007

2. Objetivo Dicas para melhoria de performance em aplicaes Java Aprenda tcnicas e ferramentas para diagnosticar e resolver problemas de desempenho em um ambiente Java 3. Objetivo

  • As tcnicas mostradas aqui so baseadas na experincia do autor, no necessariamente ela deve ser interpretada como uma receita de bolo unicamente

4. Agenda

  • Performance em Aplicaes e Ambiente
  • Compreenso bsica do gerenciamento de memria
  • Tcnicas e ferramentas para diagnstico
  • Dicas

5. Agenda

  • Performance em Aplicaes e Ambiente
  • Compreenso bsica do gerenciamento de memria
  • Tcnicas e ferramentas para diagnstico
  • Dicas

6. Dicas em Performance

  • Ajustes baseados em nmeros
    • Tx/s (mdia de transaes por segundo)
    • Usurios concorrentes
    • Quantidade de sesses
  • Armadilhas
    • O mais rpido possvel
    • Est muito lento! necessrio definir nmeros de performance

7. Dicas em Performance

  • Ao lidar com performance, um jogo de interesses comflexibilidadeemanuteno
  • Refactoring com foco em performance
    • TESTES !

8. Dicas em Performance

  • Onde est o problema ? Memria, CPU, disco, I/O, rede Passos
    • Diagnstico
    • Priorizao
    • Anlise
    • Soluo
      • Marretada
      • Ideal
    • Teste
    • Documentao

9. Dicas em Performance

  • Ajustes em cdigo
    • Microbenchmarks
    • Percepo do usurio final
  • Ajustes de arquitetura
    • O que uma transao ?
      • Tx JDBC
      • Tx Fila
      • Tx connector JCA

10. Dicas em Performance

  • Concorrencia
    • Use pool de threads
    • Diminuir o tamanho do stack (-Xss)
    • Use GC Paralelo
      • Mltiplas CPU,multicore, mltiplas threads por core
    • Aproveitar as classes Java nativas para sincronizao e concorrncia
      • Pacote java.util.concurrency
      • Collections
      • Thread safety

11. Dicas em Performance

  • void runServer() {
  • serverSocket = new ServerSocket(4444);
  • clientSocket = serverSocket.accept();
  • new Thread(new ClientOperator(clientSocket)).start();
  • }
  • classClientOperator implements Runnable{
  • public void run() {
  • final intBUFFER = 128;
  • InputStream clientIn = clientRunner.getInputStream();

12. Dicas em Performance

  • Executor pool = Executors.newFixedThreadPool(10);
  • void runServer() {
  • serverSocket = new ServerSocket(4444);
  • clientSocket = serverSocket.accept();
  • pool.execute(new ClientOperator(clientSocket));
  • }
  • classClientOperator implements Runnable{
  • public void run() {
  • final intBUFFER = 128;
  • InputStream clientIn = clientRunner.getInputStream();

13. Dicas em Performance

  • Acesso a Banco de Dados
    • Em atividades read-only (relatrios e consultas)
      • Usar um pool especfico
      • Usar isolamento transacional menos restritivo
    • Diminuir o isolamento transacional
    • Use JDBC puro para performance
    • Use PL/SQL para transformaes de dados, exigindo alta performance em operaes batch
    • Use cache e poltica para limpeza
    • No usar o protocolo XA

14. Dicas em Performance

  • JVM
    • Desabilitar osecurity managerem ambientes confiveis
    • Desabilitar a verificao de classes
      • -Xnoverify
    • GC
      • JDK > 5: Desabilitar o verbose GC, usar jstat
      • Usar algoritmos paralelos em mquinas multiprocessadas e multicore
        • -XX:+UseParallelGC
        • -XX:+UseParallelOldGC

15. Dicas em Performance

  • I/O
    • Remover System.out
    • Diminuir log
    • Usarif (log.isDebugEnabled());para evitar concatenao de strings
    • Usarjava.io.Externalizable para serializao
    • Usar buffers ejava.io.BufferedInputStream

16. Dicas em Performance

  • Servidores de Aplicativos
    • Colocar na inicializao, as tarefas de carga, parsing, pr-compilao, etc.
      • Problema: deploymen e inicializao demorado
      • Benefcio: runtime rpido
    • Ajustes
      • Acceptor threads, pool, timeout, http queue, NIO, EJB commit-option, http session tuning

17. Agenda

  • Performance em Aplicaes e Ambiente
  • Compreenso bsica do gerenciamento de memria
  • Tcnicas e ferramentas para diagnstico
  • Dicas

18. Heap -Xmx 2g 19. Heap

  • Larga rea de memria que armazena objetos e suas referncias
  • dividido em geraes
    • Gerao Young (ou New ou Eden)
    • Gerao Old (Tenured)
    • Gerao Permanente (PermGem)
  • O GC ocorre apenas quando a gerao no tem espao para alocao de novos objetos
  • Automaticamente remove objetos da memria que no possuem referncia
  • Possui diferentes algoritmos de GC

20. Heap -XX:MaxNewSize=256m -Xmx2g 21. Heap

  • Gerao Young
    • Onde novos objetos so alocados
    • A alocao de memria de curta durao
    • Objetos que no possuem referncia so removidos pelo GC
    • GC ocorre com mais frequncia
    • Tamanho pequeno

private String name = Bruce Lee; public Resultconsumidor (Long id) { Result r = processar(id); return r; } 22. Heap -XX:MaxNewSize=256m -Xmx2g 23. Heap

  • Gerao Old
    • Onde permanecem objetos cujas referncias sobreviveram ao GC da rea Young
    • Objetos de longa durao
    • GC ocorre com menor frequncia
    • Tamanho superior rea Young
    • Exemplos:
      • Atributos estticos, final, Singleton

publicstaticString name = Bruce Lee; publicfinalMap cache = new HashMap(); private staticLoader singleton = new Loader(); 24. Heap -XX:MaxNewSize=256m -Xmx2g -XX:MaxPermSize=128m 25. Heap

  • Gerao Permanente
    • Pouca ao de GC
    • Armazena a estrutura das classes
    • Armazena informaes de reflexo
    • Objetos de origem nativa (JNI)
    • No participa do heap ( -Xmx )

26. Heap

  • Criao de objetos

27. Heap

  • Ocorre um GC na rea Young, quando no tem mais espao

28. Heap

  • Ocorre outro GC na rea Young

29. Heap

  • Outro GC ocorre, ento objetos que contm referncia so transportados para a reaOld

30. Heap

  • Na rea de memraOldocorrem
    • Redimensionamento ( -Xms-Xmx )
    • Compactao (desfragmentao)
    • Larga rea de memriapara ser monitorada
    • GC ocorre de acordo com a poltica do algortmo

Old 31. Heap

  • Ergonomia (JDK 5 e 6)
    • Dimensionamento automtico das geraes
    • Baseado nas informaes
      • Sistema Operacional
      • Verso da JVM
      • Quantidade de Memria RAM
      • Quantidade de processadores
      • Tipo do processador (Sparc)

32. Agenda

  • Performance em Aplicaes e Ambiente
  • Compreenso bsica do gerenciamento de memria
  • Tcnicas e ferramentas para diagnstico
  • Dicas

33. Tcnicas

  • Resolvendo problemas de memria
    • OutOfMemoryError (OOME)
    • Outros problemas em geral
  • Resolvendo problemas de CPU
    • Uso intensivo de CPU e threads
    • Garbage Collector com frequncia
    • Outros problemas em geral

34. Tcnicas Cada tcnica para diagnosticar problemas, tem um nvel de intruso no sistema, que pode variar entre umrpido monitoramento no sistemaou umprofiler e debugno sistema. Essa a chave que ir determinar otempo para resoluo do problema 35. Problemas de memria

  • Como diagnosticar um OOME ?
    • Olhe nos logs de aplicaes
    • Monitore o comportamento
      • jmap, jstack, visualgc, jconsole, log do GC
    • Verifique qual a causa do OOME

36. Problemas de memria

  • Tipos de OOME
    • Java heap space
    • PermGen space
    • Out of swap space
    • unable to create new native thread

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at ConsumeHeap$BigObject.(ConsumeHeap.java:22) at ConsumeHeap.main(ConsumeHeap.java:41) 37. Problemas de memria

  • Java heap space
  • Causas
    • Pouca memria fsica
      • Monitoramento pelo SO:prstat, top, vmstat, mpstat
    • Baixo valor do heap
      • TantoYoung (-XX:MaxNewSize) e Old (-Xmx)
    • Reteno de objetos (memory leak)
      • Monitorar com jconsole ou gcviewer , a evoluo do GC
      • Uso de profiler para monitorar objetos retidos em cadainvocao do GC

38. Problemas de memria

  • Monitoramento pelo sistema operacional

top 39. Problemas de memria

  • Java heap space
  • Diagnstico de memory leak, com monitoramento de GC

40. Problemas de memria

  • Diagnstico de memory leak com profiler

41. Problemas de memria

  • Diagnstico de memory leak com profiler

42. Problemas de memria

  • Diagnstico de memory leak com heap dump

43. Problemas de memria

  • Java heap space
  • Correo
    • Aumente o tamanho do heap
      • TantoYoung (-XX:MaxNewSize) e Old (-Xmx)
    • Memory leak
      • Liberar as objetos alocados
      • Normalmente so colees com finalidade de cache
    • Aumentar a memria fsica da mquina

44. Problemas de memria

  • PermGen space
  • Causas
    • Pouca memria disponvel para a memria permanente
    • Classloader leak
      • Ocorre quando um classloader ser descartado, mas um objeto carregado por este classloader referenciado por objetos fora deste classloader

45. Problemas de memria

  • Classloader leak

46. Problemas de memria

  • Classloader leak

47. Problemas de memria

  • Classloader leak

48. Problemas de memria

  • Classloader leak

49. Problemas de memria

  • Classloader leak

50. Problemas de memria

  • Classloader leak

51. Problemas de memria

  • PermGen space
  • Correo
    • Aumente o tamanho da memria permanente
      • Geralmente ocorre quando usado frameworks de gerao de classes
      • -XX:MaxPermSize e -XX:PermSize
    • Classloader leak
      • Gerenciar a dependncia dos objetos, para remover a referncias dependentes

52. Problemas de memria

  • Out of swap space
  • Causas
    • Geralmente ocorre em cdigo nativo (JNI)
      • Geralmente invocado por alguma operao Java
    • Falta de espao na memria do SO
  • Correo
    • Aumentar memria fsica da mquina
    • Diminuir tamanho do heap do java

53. Problemas de memria

  • Unable to create new native thread
  • Causas
    • Tamanho elevado do stack ( -Xss )
    • Pouca memria disponvel para o SO
      • Pois cada thread em Java mapeada para uma thread do SO ( native threads )
    • Pobre gerenciamento de threads

54. Problemas de memria

  • Unable to create new native thread
  • Correo
    • Diminuir o tamanho do Stack ( -Xss )
    • Aumentar memria fsica
    • Diminuir tamanho do heap, pois sobra espao para o SO
    • Melhor gerenciamento de threads
      • Usar pool de threads, disponvel do Java 5

55. Problemas de memria

  • E quando ocorre um crash no servidor ?
    • Habilitar o dump de memria (heap dump)
      • -XX:+HeapDumpOnOutOfMemoryError
      • -XX:+HeapDumpOnCtrlBreak
    • Analisar o dump gerado
        • O tamanho do dump gerado proporcional ao tamanho do heap
      • Heap roots e heap analyzer
      • SAP Memory Analyzer
      • jhat

56. Problemas de memria

  • Outras ferramentas de suporte a monitoramento de memria
    • vmstat
    • pmap
    • ulimit

57. Problemas de memria

  • Monitoramento pelo sistema operacional
  • vmstat

58. Problemas de memria

  • pmap

59. Problemas de memria

  • ulimit

60. Problemas de CPU

  • Como diagnosticar consumo de CPU?
    • Monitorar uso do sistema operacional
    • Verificar qual aplicao consome os recursos
    • Monitorar o GC
    • Monitorar as threads
    • Uso de profiler

61. Atividade do SO 62. Problemas de CPU

  • Monitorar uso do sistema operacional
    • Se o problema for da aplicao Java ento outro tipo de monitoramento necessrio

Verificar atividade de GC 63. Atividade do GC 64. 65. Atividade do GC

  • Correo
    • Dimensionar as reas de memria adequadamente
      • Mesmo que no ocorra OOME, a frequencia do GC consome CPU exageradamente
    • Parametrizar o comportamento da JVM
      • Algoritmos de GC

66. Problemas de CPU Verificar atividade de Threads 67. Comportamento das threads

  • Causas
    • Pobre gerenciamento de threads
      • Quantidade exagerada de threads
      • No usar pool de threads
    • Mquina insuficiente para processamento
    • Dead lock
      • Dependncia circular
    • Pobre implementao da aplicao
      • Processamento intenso de strings
      • Transformao de dados desnecessria

68. Comportamento das threads

  • jstack

69. Comportamento das threads 70. Comportamento das threads 71. Comportamento das threads

  • Uso do profiler implica
    • Aplicao compilada em modo debug
    • Modificar as configuraes da JVM para profiler
      • Penaliza performance
      • Modifica o comportamento da JVM (modo interpretado)
    • Console grfico para anlise on-line

72. Ferramentas adicionaispara diagnstico 73. Ferramentas para diagnstico

  • Outras ferramentas para diagnstico
    • mpstat, prstat, top, vmstat, pmap
      • Estatsticas de CPU e memria
    • iostat
      • Trfego de I/O (rede e disco)
    • pstack
      • Stacktrace de processos
    • strace, truss
      • Rastreio de system calls
    • ps, pstree, ptree
      • rvore de processos

74. Ferramentas para diagnstico

  • Outras ferramentas para diagnstico
    • ldd
      • rvore de dependncias de bibliotecas
    • dmesg
      • Inicializao do kernel
    • ulimit
      • Limites de recursos do usurio

75. Ferramentas para diagnstico

  • Rede (unixes)
    • Wireshark (Ethereal), tcpdump, snoop
      • Anlise de trfego de rede
    • dig, nslookup
      • Resoluo de nomes DNS
    • netstat
      • Status de conexes, tabelas de roteamento, etc
    • lsof
      • Estatsticas de uso de file descriptors

76. Ferramentas para diagnstico 77. Ferramentas para diagnstico 78. Agenda

  • Performance em Aplicaes e Ambiente
  • Compreenso bsica do gerenciamento de memria
  • Tcnicas e ferramentas para diagnstico
  • Dicas

79.

  • Servidor de Aplicativos
    • Monitoramento de recursos
      • Pool de conexes, threads
    • Logs
      • Nveis de log
    • Keep-alive e pipeline
    • Classpath
    • Cluster
      • Sincronizao, I/O, rede
    • Threads
      • Acceptor, queue, pool, timeout

Dicas 80.

  • Servidor de Aplicativos
    • Classloader
    • Carga dinmica de aplicaes
      • Compilao de JSP, redeploy, autodeploy, auto discovery
    • Gerenciamento de sesso
      • HttpSession
      • Stateful Session Bean

Dicas 81. Dicas

  • Seja cauteloso com informaes obtidas
  • No seja prematuro ao informar sobre onde est o problema
  • Ter uma viso do contexto computacional
    • Configurao de mquinas, sistema operacional, estrutura de rede, servios, e dependncias
  • Compreender quais os servios afetados e nvel de importncia
  • Conhecer as equipes envolvidas e seus responsveis

82. Dicas

  • No entre em pnico
  • Conhea as ferramentas e como us-las
  • No dependa de consoles grficos
  • Isole o problema
  • Tente confirmar todos os relatos
  • Ter acesso ao cdigo fonte da aplicao
  • Ter a mo um bom decompilador (jad)
  • Verificar todos os arquivos de configuraes
  • Ao confirmar o problema, j entregue a soluo

83. Muito Obrigado Claudio Miranda [email_address] http://www.soujava.org.br http://www.summa-tech.com http://www.claudius.com.br