Sexta-feira, 6 Março 2009

Como reduzir espaço em disco do JDK em ambiente servidor

No decorrer dos anos, as novas versões do JDK estavam acompanhadas de novas funcionalidades, bibliotecas, etc.

E sempre existiram comentários na comunidade, sobre o tamanho do JDK e o espaço ocupado pelo JDK, após a instalação.

Pois vou dar uma dica de como remover arquivos desnecessários do JDK em ambiente servidor. Na maioria das vezes, isso só será necessário se uma economia de 100MB for importante. Ou instalações em rede com imagem, para poupar tempo de download para outras estações.

A dica é baseada em um ambiente Linux 32 bits, com uma instalação padrão do JDK 6 update 12.

A instalação padrão ocupa um espaço de 239 MB. Veja a ocupação de espaço nas versões anteriores do JDK.

82M     j2sdk1.4.2_18
141M    jdk1.5.0_16
239M    jdk1.6.0_12

Uma boa evolução no espaço ocupado.

Veja os arquivos que podem ser removidos, e o tamanho que será economizado em disco.

7.9M    sample/
20M     demo/
19M     src.zip
4.3M    db/demo/
18M     db/docs/
2.1M    db/javadoc/
96K     db/lib/derbyLocale_cs.jar
100K    db/lib/derbyLocale_de_DE.jar
92K     db/lib/derbyLocale_es.jar
100K    db/lib/derbyLocale_fr.jar
96K     db/lib/derbyLocale_hu.jar
92K     db/lib/derbyLocale_it.jar
108K    db/lib/derbyLocale_ja_JP.jar
104K    db/lib/derbyLocale_ko_KR.jar
96K     db/lib/derbyLocale_pl.jar
92K     db/lib/derbyLocale_pt_BR.jar
120K    db/lib/derbyLocale_ru.jar
96K     db/lib/derbyLocale_zh_CN.jar
96K     db/lib/derbyLocale_zh_TW.jar
23M     lib/visualvm/
94M     total

Uma economia de 94 MB

Estes arquivos não são necessários em ambiente servidor. Com exceção de alguns arquivos do visualvm, que possui as bibliotecas nativas para efetuar profiling remoto, mas isso geralmente não é necessário em ambiente servidor de testes ou produção, ou alguém faz prifiling em produção ?

No caso dos arquivos de i18n do derby, prefiro usar os termos em inglês, pois acho conveniente que os termos técnicos sejam em inglês (meu ponto de vista sobre o caso).

Escrito por claudio at 1:22 AM categorizado por Java

Tags: dicas java

Quinta-feira, 5 Março 2009

Ceritificado MySQL Developer I

Ontem fiz uma prova CMDEV-I, para certificação MySQL 5.0 Developer (part I), e passei.

Então a pergunta, porque certificar em MySQL ? Pois foi exigido para um projeto onde vou trabalhar. Ainda tenho de fazer a parte II, par ter a certificação completa.

Não achei a prova difícil, mas alguns tópicos me surpreenderam, pois pelo guia de estudo, algumas questões envolviam conhecimentos da parte II do exame.

Além do título da certificação, consegui aprender um pouco mais sobre o funcionamento do MySQL.

Escrito por claudio at 1:38 PM categorizado por Diversos

Tags: certificacao

Quinta-feira, 26 Fevereiro 2009

Reunião SouJava em São Paulo, dia 26/02

Hoje tem reunião do SouJava na cidade de São Paulo.

Veja a mensagem do anúncio

=======================================================

Nossa primeira reunião de 2009 irá acontecer HOJE.

Programação:

18:30 - Meeting
19:00 - Domain Driven Design (Sergio Lopes)
20:15 - Coffee-Break(Patrocínio da Caelum)
20:45 - JRuby on Rails: pronto para o prime time? (Fabio Kung)
22:00 - Encerramento

Local: Rua Tabapuã, 627, Itaim Bibi, São Paulo (no auditório da
Sucesu-SP, andar térreo).
http://www.sucesusp.org.br/site1/geral/localizacao.html

Por favor, enquanto o site do SouJava estiver sendo atualizado peço
que todos confirmem sua presença enviando um email para mim com o
título "CONFIRMAÇÃO REUNIÃO SOUJAVA - 26/02" e no corpo do email o
nome completo para o endereço:

jailton@soujava.org.br

Sua confirmação nos ajudará a organizar uma reunião muito melhor para
todos!! Obrigado.

Escrito por claudio at 3:12 PM categorizado por SouJava

Tags: soujava noticias

Terça-feira, 24 Fevereiro 2009

Voltei e algumas dicas

Apenas avisando que não morri, apenas fiquei preguiçoso para escrever.

Idéias não faltam, então para você não perder mais tempo, vou colocar algumas dicas e outras coisas que tenho feito

O projeto ainda precisa de algumas melhorias, que vou escrever aqui, com alguns screenshots e explicações.

  • Em um projeto passado, usei o Oracle SQL Plus, e cansado de pressionar a tecla para cima, na esperança de ter o histórico de comandos e o sqplus não suportar, então arrumei uma solução que funciona para qualquer aplicação console com prompt. É o rlwrap, veja a sintaxe do comando

rlwrap /usr/local/instantclient_10_2/sqlplus $*

Onde o histórico fica armazenado em ~/.sqlplus_history e a tecla para cima funciona.

O rlwrap é facilmente encontrado em qualquer distribuição linux.

 

  • Tenho instalado o mysql 5.0.51 instalado pelo apt-get no ubuntu. Precisei instalar a versão mais recente 5.1.31. Não queria perder muito tempo instalando e configurando arquivos de configuração com paths, portas, etc. Então encontrei um projeto mysql_sandbox, que consegue instalar várias versões do mysql em diferentes configurações e isoladas uma das outras.
./make_sandbox /usr/local/mysql_bits/unpacked/mysql-5.1.31-linux-i686-glibc23.tar.gz 
--db_user=claudio --db_password=blah123 --sandbox_port=3310

Pronto, tudo funcionando.
 

  • Ajudo a moderar algumas listas do SouJava, e no sistema atual do ezmlm (gerenciador de listas de email) cada mensagem moderada é enviada um email com um cabeçalho gigante para o meu email, então se eu tivesse 15 mensagens para moderar, é um pé no saco entrar em cada mensagem, rolar ao final para ver o conteúdo, copiar o endereço de aceite/rejeição, depois agregar tudo e enviar. Então cansado disso, gastei algumas horas e criei um sistema de moderação, ezmod.

Usei Wicket, JPA e Jetty, e está funcionando muito bem. Se alguém precisar fazer um test-drive posso enviar o link para moderar alguma lista. Por falar em Wicket, já lançaram o 1.4 RC2.
 

  • Quando pesquiso no google, algum resultados de outros mecanismos de pesquisa aparecem (tel3listas, etc.), outro comportamento foi o google adicionar uma espécie de customização de resultados, não gostei, e aproveitei para adicionar um parâmetro de busca por data. Coloquei isso nas configurações de pesquisa do firefox, no caminho
/usr/local/firefox/searchplugins/google.xml

Como está hoje

<Param name="q" value="{searchTerms}+-site:site.que.nao.quero.net+-site:outrosite.que.nao.quero.com.br"/>
<Param name="ie" value="utf-8"/>
<Param name="as_qdr" value="y5"/>
<Param name="hl" value="all"/>
<Param name="oe" value="utf-8"/>
<Param name="aq" value="t"/>

Basicamente alterei os parametros hl e as_qdr, que significam respectivamente o idioma e o resultado será direcionado para o idioma inglês (default); o as_qdr informa o uma faixa de tempo em meses ou anos.

Maiores informações sobre o significado dos parametros.

Escrito por claudio at 7:27 PM categorizado por Dicas e Scripts

Tags: dicas

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

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