Palestra efetuada por Claudio Miranda no evento Conexão Java 2007http://www.claudius.com.br
- 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
5. Agenda
- Performance em Aplicaes e Ambiente
- Compreenso bsica do gerenciamento de memria
- Tcnicas e ferramentas para diagnstico
6. Dicas em Performance
- Ajustes baseados em nmeros
-
- Tx/s (mdia de transaes por segundo)
-
- 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
8. Dicas em Performance
- Onde est o problema ? Memria, CPU, disco, I/O, rede Passos
9. Dicas em Performance
10. Dicas em Performance
-
- Diminuir o tamanho do stack (-Xss)
-
-
- Mltiplas CPU,multicore, mltiplas threads por core
-
- Aproveitar as classes Java nativas para sincronizao e
concorrncia
-
-
- Pacote java.util.concurrency
11. Dicas em Performance
- serverSocket = new ServerSocket(4444);
- clientSocket = serverSocket.accept();
- new Thread(new ClientOperator(clientSocket)).start();
- classClientOperator implements Runnable{
- InputStream clientIn = clientRunner.getInputStream();
12. Dicas em Performance
- Executor pool = Executors.newFixedThreadPool(10);
- serverSocket = new ServerSocket(4444);
- clientSocket = serverSocket.accept();
- pool.execute(new ClientOperator(clientSocket));
- classClientOperator implements Runnable{
- InputStream clientIn = clientRunner.getInputStream();
13. Dicas em Performance
-
- Em atividades read-only (relatrios e consultas)
-
-
- 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
14. Dicas em Performance
-
- Desabilitar osecurity managerem ambientes confiveis
-
- Desabilitar a verificao de classes
-
-
- JDK > 5: Desabilitar o verbose GC, usar jstat
-
-
- Usar algoritmos paralelos em mquinas multiprocessadas e
multicore
15. Dicas em Performance
-
- 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
-
-
- 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
18. Heap -Xmx 2g 19. Heap
- Larga rea de memria que armazena objetos e suas referncias
-
- Gerao Young (ou New ou Eden)
-
- 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
-
- 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
private String name = Bruce Lee; public Resultconsumidor (Long
id) { Result r = processar(id); return r; } 22. Heap
-XX:MaxNewSize=256m -Xmx2g 23. Heap
-
- Onde permanecem objetos cujas referncias sobreviveram ao GC da
rea Young
-
- GC ocorre com menor frequncia
-
- Tamanho superior rea Young
-
-
- 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
-
- Armazena a estrutura das classes
-
- Armazena informaes de reflexo
-
- Objetos de origem nativa (JNI)
-
- No participa do heap ( -Xmx )
26. Heap
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
-
- Dimensionamento automtico das geraes
-
-
- 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
33. Tcnicas
- Resolvendo problemas de memria
-
- 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
-
-
- jmap, jstack, visualgc, jconsole, log do GC
-
- Verifique qual a causa do OOME
36. Problemas de memria
-
- 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
-
-
- Monitoramento pelo SO:prstat, top, vmstat, mpstat
-
-
- 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
- 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
-
- Aumente o tamanho do heap
-
-
- TantoYoung (-XX:MaxNewSize) e Old (-Xmx)
-
-
- Liberar as objetos alocados
-
-
- Normalmente so colees com finalidade de cache
-
- Aumentar a memria fsica da mquina
44. Problemas de memria
-
- Pouca memria disponvel para a memria permanente
-
-
- Ocorre quando um classloader ser descartado, mas um objeto
carregado por este classloader referenciado por objetos fora deste
classloader
45. Problemas de memria
46. Problemas de memria
47. Problemas de memria
48. Problemas de memria
49. Problemas de memria
50. Problemas de memria
51. Problemas de memria
-
- Aumente o tamanho da memria permanente
-
-
- Geralmente ocorre quando usado frameworks de gerao de
classes
-
-
- -XX:MaxPermSize e -XX:PermSize
-
-
- Gerenciar a dependncia dos objetos, para remover a referncias
dependentes
52. Problemas de memria
-
- Geralmente ocorre em cdigo nativo (JNI)
-
-
- Geralmente invocado por alguma operao Java
-
- Falta de espao na memria do SO
-
- Aumentar memria fsica da mquina
-
- Diminuir tamanho do heap do java
53. Problemas de memria
- Unable to create new native thread
-
- 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
-
- Diminuir o tamanho do Stack ( -Xss )
-
- 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
-
-
-
- O tamanho do dump gerado proporcional ao tamanho do heap
-
-
- Heap roots e heap analyzer
56. Problemas de memria
- Outras ferramentas de suporte a monitoramento de memria
57. Problemas de memria
- Monitoramento pelo sistema operacional
58. Problemas de memria
59. Problemas de memria
60. Problemas de CPU
- Como diagnosticar consumo de CPU?
-
- Monitorar uso do sistema operacional
-
- Verificar qual aplicao consome os recursos
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
-
- Dimensionar as reas de memria adequadamente
-
-
- Mesmo que no ocorra OOME, a frequencia do GC consome CPU
exageradamente
-
- Parametrizar o comportamento da JVM
66. Problemas de CPU Verificar atividade de Threads 67.
Comportamento das threads
-
- Pobre gerenciamento de threads
-
-
- Quantidade exagerada de threads
-
- Mquina insuficiente para processamento
-
- Pobre implementao da aplicao
-
-
- Processamento intenso de strings
-
-
- Transformao de dados desnecessria
68. Comportamento das threads
69. Comportamento das threads 70. Comportamento das threads 71.
Comportamento das threads
-
- Aplicao compilada em modo debug
-
- Modificar as configuraes da JVM para profiler
-
-
- 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
-
-
- Trfego de I/O (rede e disco)
74. Ferramentas para diagnstico
- Outras ferramentas para diagnstico
-
-
- rvore de dependncias de bibliotecas
-
-
- Limites de recursos do usurio
75. Ferramentas para diagnstico
-
- Wireshark (Ethereal), tcpdump, snoop
-
-
- Status de conexes, tabelas de roteamento, etc
-
-
- 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
79.
-
- Monitoramento de recursos
-
-
- Acceptor, queue, pool, timeout
Dicas 80.
-
- Carga dinmica de aplicaes
-
-
- Compilao de JSP, redeploy, autodeploy, auto discovery
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
- Conhea as ferramentas e como us-las
- No dependa de consoles grficos
- 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