performance em java
Post on 29-Jun-2015
10.172 Views
Preview:
DESCRIPTION
TRANSCRIPT
- 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
top related