Quinta-feira, 2 Outubro 2008

Geração de heap dump no linux 64 bits

Estou em um trabalho para um cliente envolvendo melhorias de performance na aplicação e no ambiente operacional (appserver, sistema operacional, jvm).

O ambiente é Linux 64 bits (RedHat, kernel 2.6.18 SMP), JDK 5 e Glassfish v2 ur2.

Em um dado momento, precisei gerar um heap dump, mas ocorreu um erro  sun.jvm.hotspot.debugger.UnmappedAddressException.

# /usr/local/jdk/jdk1.6.0_07/bin/jmap -J-d64 -F -dump:file=java_dump_10791.hprof  10791
Attaching to process ID 10791, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 10.0-b23
Dumping heap to java_dump_10791.hprof ...
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at sun.tools.jmap.JMap.runTool(JMap.java:178)
        at sun.tools.jmap.JMap.main(JMap.java:110)
Caused by: sun.jvm.hotspot.debugger.UnmappedAddressException
        at sun.jvm.hotspot.debugger.PageCache.checkPage(PageCache.java:208)
        at sun.jvm.hotspot.debugger.PageCache.getData(PageCache.java:63)
        at sun.jvm.hotspot.debugger.DebuggerBase.readBytes(DebuggerBase.java:205)
        at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.readCInteger(LinuxDebuggerLocal.java:471)
        at sun.jvm.hotspot.debugger.DebuggerBase.readAddressValue(DebuggerBase.java:442)
        at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.readOopHandle(LinuxDebuggerLocal.java:431)
        at sun.jvm.hotspot.debugger.linux.LinuxAddress.getOopHandleAt(LinuxAddress.java:115)
        at sun.jvm.hotspot.oops.Oop.getKlassForOopHandle(Oop.java:222)
        at sun.jvm.hotspot.oops.ObjectHeap.newOop(ObjectHeap.java:348)
        at sun.jvm.hotspot.utilities.HashtableEntry.literal(HashtableEntry.java:53)
        at sun.jvm.hotspot.memory.SymbolTable.symbolsDo(SymbolTable.java:106)
        at sun.jvm.hotspot.utilities.HeapHprofBinWriter.writeSymbols(HeapHprofBinWriter.java:830)
        at sun.jvm.hotspot.utilities.HeapHprofBinWriter.write(HeapHprofBinWriter.java:396)
        at sun.jvm.hotspot.tools.HeapDumper.run(HeapDumper.java:56)
        at sun.jvm.hotspot.tools.Tool.start(Tool.java:221)
        at sun.jvm.hotspot.tools.HeapDumper.main(HeapDumper.java:77)

Tentei gerar o dump através de:

  • -XX:+HeapDumpOnCtrlBreak and kill -3
  • jmap -heap:format=b
  • gcore utility

Com isso decidi usar o JDK 6 u7 (changelog), mas ocorreu o mesmo problema.

UPDATE: A stacktrace mostrada acima, mostra a invocação de um comando jmap do JDK 6 u7, para uma VM 6 u7.
UPDATE: Anteriormente, quando estava com JDK 5 u12, tentei rodar o jmap a partir de uma VM 5 u12, mas o mesmo erro ocorreu
UPDATE: A VM não está com a opção -Xrs option.
UPDATE: O usuário que iniciou o processo é o mesmo que usei para invocar o comando jmap, root.

UPDATE: Alan Bateman, explicou sobre o uso da opção -F "A opção -F faz como que a ferramenta se conecte no processo de uma maneira não colaborativa e pode causa a geração de um dump inconsistente. Em outras palavras, não há garantia de que será um bom heap dump ao usar a opção -F", veja este comentário em inglês na seção de comentários abaixo.

Então encontrei um bug corrigido "Throws UnmappedAddressException while reading address from core file in shared area.", entao decidi usar o JDK 6 u10 RC.

Coloquei a opção -Xshare:off

E funcionou muito bem,o processo não foi derrubado e a aplicação funcionou normalmente.

Não esqueça que no momento do heap a JVM paralisa todas as threads e o arquivo gerado será tão grande (ou um pouco menor) como a memória RSS usada pelo processo.

Então, se for gerar heap dump em linux 64 bits, use o JDK 6 u10 RC com a opção -Xshare:off.

Ao final da geração do heap dump, as mensagens abaixo foram impressas

"Finding object size using Printezis bits and skipping over..."

Obrigado Tony, pelo seu trabalho no HotSpot.

Escrito por claudio at 1:28 AM categorizado por Java

Tags: java performance linux

Terça-feira, 9 Setembro 2008

Ferramentas de diagnóstico em performance na prática

3

Tenho efetuado a palestra sobre diagnóstico em problemas de performance, desde 2006 em diversos eventos.

Pelo feedback que recebo, percebo que este é um assunto de interesse para um numeroso grupo de profissionais.

Então, é por isso que você que é interessado em entender mais sobre performance, garbage collector, thread pools, thread dumps e memory dumps, deve comparecer no próximo dia 12 (sexta-feira) as 9h no Senac, onde ocorre o JustJava. Pois irei realizar um workshop na prática sobre este assunto.

O nome é "Diagnóstico e Resolução de Problemas de Performance em Java", é requerido trazer o laptop para máximo aproveitamento.

O workshop (hands-on lab), será um misto de palestra com exercícios sobre o tema. Será seguido (tentativa) o seguinte roteiro:

  • Explicação sobre um tópico
  • Demonstração
  • Fazer com que os atendentes resolvem um exercício

Os tópicos serão

  • Gerenciamento de memória do Java
  • Ferramentas para diagnóstico
  • Thread Dumps
  • Memory Dumps
  • Ferramentas para profiling

Para um máximo rendimento para o atendente, é necessário seguir alguns pontos:

Configurem as variáveis JAVA_HOME e PATH=$JAVA_HOME/bin

O uso do Linux não é obrigatório, mas facilita muito, e irei basear meus exemplos nele.

Note, que o tempo do workshop não será prejudicado, por aqueles que não possuem os sistemas instalados. Pois o tempo é curto para muito conteúdo de não fácil absorção.

Não posso esperar pela próxima sexta, para divertir com thread dumps, pools estourando e memória escorrendo pelos buracos do laptop.

Escrito por claudio at 2:57 AM categorizado por Java

Tags: eventos java noticias palestra justjava performance

Sábado, 6 Setembro 2008

Só Java

Só Java

Começou praticamente nesta semana o mês do Java no Brasil, uma iniciativa de diversos JUGs liderado pelo SouJava, onde teremos a participação de importantes membros da comunidade Java brasileira, pessoas experientes na tecnologia Java e que tem muito a compartilhar.

Teremos também a participação de diversos palestrantes internacionais, que irão a várias cidades do Brasil.

Confira quais são as cidades onde irá acontecer os eventos.

Serão muitas palestras onde as pessoas, vão ter acesso a informações sobre as novidades do mundo Java, melhores práticas, dicas, técnicas, ferramentas, frameworks, etc. Mostrando Java no lado servidor, em telefones celulares e pequenos dispositivos, no lado desktop/cliente.

Você simplesmente não pode perder esta oportunidade, é um investimento em sua carreira. Aprender com as palestras, fazer novos contatos, enriquecer o seu curriculo, tenho certeza que irá conseguir aproveitar muito bem.

O que sinto extremo orgulho de participar de uma comunidade como esta, é a capacidade de organização, comprometimento e realização de diversas pessoas dispersas geograficamente, para fazer um evento deste tipo.


JustJava 2008

O JustJava já está em sua 7a edição, isso mostra a tradição do evento em trazer boas palestras técnicas e informativas.

Eu participei de todos os JustJava e para mim foi muito bom, participar como palestrante e participante, assisti diversas palestras e aprendi muita coisa interessante.

E neste evento, você ainda pode ter a oportunidade de ganhar uma entrada gratuita.

O SouJava oferece uma entrada gratuita para, colaboradores que possam participar como Coordenador de Mesa.

O que faz um coordenador de mesa ?

- Anuncia o título e autor da palestra
- Ajuda ao palestrante se necessário;
- Controla o tempo da sessão
- Controla perguntas.

Quais as vantagens ?

- Entrada gratuita para o evento
- Visão privilegiada da palestra
- Interação com o palestrante
- Uma forma de contribuir com a comunidade, através do evento

Você quer ser um coordenador de mesa ? então preencha o formulário
abaixo, pois as vagas são limitadas.

http://soujava.org.br/display/v/Coordenador+de+Mesa

Mês de Java

O mês de Java, conta com a participação de diversos JUGs em várias cidades, vejam o mapa das cidades e datas que ocorrerão os eventos.

Eu já havia escrito sobre o mês de Java antes.

A atualização sobre o blog anterior, é a confirmação de diversos palestrantes internacionais que irão falar e demonstrar sobre Glassfish, Hudson, Sun Spot, NetBeans, Java ServerFaces.

Para quem não poderá ir nos principais eventos em São Paulo (JustJava e Sun Tech Days), poderá ir até alguma das cidades onde irá ocorrer o evento.


Escrito por claudio at 6:43 PM categorizado por Java

Tags: eventos java noticias palestra justjava

Quinta-feira, 21 Agosto 2008

HotSpot Internals

Encontrei um tempo atrás, um site wiki no endereço da Sun.com com informações interessantes para quem quer entender mais sobre HotSpot, mas não tem tempo para ler o código fonte, é o HotSpot Internals.

Como exemplo cito uma página sobre otimizações em código java, onde o HotSpot consegue tirar melhor proveito.

Escrito por claudio at 12:55 AM categorizado por Java

Tags: dicas java performance

Quinta-feira, 14 Agosto 2008

Reunião SouJava, Hoje 14/agosto/2008

Hoje (quinta-feira, 14 de agosto de 2008) terá uma reunião do SouJava.

Veja no link acima o anúncio completo e como fazer inscrições. Irá ter sorteio de assinaturas de revistas WebMobile, JavaMagazine e SQLMagazine.


IBM open source and Web 2.0 strategies (Estratégias IBM para open source e Web 2.0)

Palestrante: Steven Calello - IBM

Esta palestra será ministrada em inglês, porém disponibilizaremos um recurso de tradução simultânea que poderá ser utilizado por QUEM TROUXER UM RÁDIO FM!!! (celular ou walkman)


Escrito por claudio at 3:04 PM categorizado por SouJava

Tags: soujava noticias java

Sexta-feira, 8 Agosto 2008

Novo serviço de hosting VPS

Durante alguns anos user o serviço de VPS (Virtual Private Hosting) de uma empresa na Inglaterra, SparseZone. Onde usava um zone solaris e estava muito contente com o serviço deles.

Ocorre que o o SparseZone não vai mais oferecer o serviço (não sei o motivo), então tive de procurar outro lugar, um VPS com preço semelhante.

Então encontrei um serviço tão bom, é um VPS Linux, onde é possível escolher qual distribuição vai usar (Debian, Ubuntu, RedHat) em 32 ou 64 bits.

O serviço é oferecido pela empresa TekTonic, onde eles tem algumas categorias de serviços e planos. Eu peguei o Unmanaged em um plano básico, para usar neste site que está vendo agora.

No plano básico oferecem:

  • 294 MB de memória RAM
  • 13 GB de disco
  • 500 GB de taxa de transferência mensal
  • 1 endereço IP
  • 25% de uso de toda a CPU

Esta mensagem serve mais para incentivar a galera que quer ter sua própria maquina na internet, onde o preço não é caro e a experência é bem bacana.

De nenhuma maneira sou afiliado a esta empresa, nem vou ganhar desconto algum. Apenas acho que se o serviço é bom e barato, merece ser recomendado.

Eu Recomendo !

Escrito por claudio at 11:30 PM categorizado por Dicas e Scripts

Tags: dicas linux solaris

Grupos do SouJava no Linkedin

Dia interessante hoje, 8/8/08

O SouJava criou alguns grupos no site de relacionamento profissional Linkedin, para facilitar o relacionamento de quem participa com o SouJava de alguma maneira.

Os grupos existentes hoje são:

  • SouJava

    Grupo aberto para quem quer manifestar apoio ao SouJava, já participou das reuniões e dos eventos, este grupo é aberto para qualquer participante.

  • SouJava Speakers

    Este grupo é para quem já fez alguma palestra em algum evento do SouJava, tanto reunião mensal, evento, workshop. A participação neste grupo é moderada. Para participar do grupo é necessário informar data, evento e nome da palestra que foi efetuada.

  • SouJava Admin

    Este grupo é restrito às pessoas que participam da organização do SouJava.
  • SouJava Campinas

    Este grupo é para o pessoal da região de Campinas. Este grupo não foi criado por nós, mas acredito que as as idéias são semelhantes.

Escrito por claudio at 12:09 PM categorizado por Java

Tags: java soujava

 
     Navegue no histórico de mensagens: « First  « Prev   1 2 3 4 5   Next »  Last »