Sexta-feira, 24 Julho 2009

Admin sem segurança

Vejam alguns consoles do JBoss em instalações na internet.

http://www.google.com/search?hl=all&q=inurl%3A%22%2Fjmx-console%2F%22+%22JMX+MBean+View%22

Esta pesquisa no google irá procurar por todas as urls que tenham "/jmx-console/" e a string completa "JMX MBean View".

Se quiserem ver sites brasileiros, adicionem a opção site:com.br ou site:gov.br

O console do JBoss tem esta String no console de administração, que visualiza os nomes JNDI.

Os administradores de sistema dos sites resultados da pesquisa deveriam habilitar a segurança do console de administração.

Vejam como habilitar o console de segurança.

Já usei o JBoss em diversos projetos desde 2002 e sempre que o projeto é colocado em produção, o console admin é removido ou é habilitado a segurança na autenticação.

Leiam isso apenas como aviso de como melhorar as instalações de sistemas. Acessei alguns consoles admin, para ver se a segurança estava realmente desabilitada. Não fiz nenhuma alteração no sistema. Recomendo que vocês também não o façam.

Escrito por claudio at 4:34 PM categorizado por Dicas e Scripts

Tags: dicas java

Terça-feira, 21 Julho 2009

Abrir programa gráfico com su - / sudo

Ao usar linux/unix é comum usar outro login de usuário para inicializar um programa gráfico.

Repetidas vezes passei pela situação seguinte:

sudo su -
root@foxhound:~# xeyes
Error: Can't open display:
root@foxhound:~# export DISPLAY=:0
root@foxhound:~# xeyes
No protocol specified
Error: Can't open display: :0

Como fazer com que o programa gráfico seja iniciado e exibido ?

Em outro console é necessário dar permissão para um login localhost usar o servidor gráfico.

xhost local:claudio

Então pode lançar o programa gráfico no console anterior.

Note, deve trocar o nome de usuário acima, para o usuário de sua máquina.

A explicação para isso é que no mundo unix existe o "X Server", um servidor gráfico que gerencia as aplicações GUI.

Com isso é possível, por exemplo acessar uma máquina unix remota e de lá iniciar um firefox, onde a exibição gráfica é mostrada no seu computador local.

Escrito por claudio at 3:51 PM categorizado por Linux e F/OSS

Tags: dicas linux

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

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