Darkside  

Voltar   Darkside > Darkside > Comunidade
FAQ Calendário Postagens do dia Buscapé Search

Responder
 
Thread Tools
Never Ping
🌀 Trooper
 

Gamertag: Willian Braga PSN ID: Never_Ping XFIRE ID: neverping Steam ID: neverping
Default Tuning Java

04-01-06, 18:15 #1
Bem, estou estudando sobre Java Memory tuning, pois estou querendo otimizar um web application server lá no work.

Estou querendo evitar um erro que ocorre, que é o tão famigerado OutOfMemoryException. Creio que os tunings já existentes no start da JVM não são legais e, como também não posso dar detalhes, queria saber se alguem tem como me passar alguma página que informe todos os parâmetros de start da JVM da Sun, ou então algum start que vocês costumam colocar que não tenha esse problema.

Vi este excelente artigo da IBM que foi bem mais explicativo que a JVM da Sun.

http://www-128.ibm.com/developerwork...ary/i-gctroub/

Pra quem teve esses problemas de OutOfMemoryException, só precisam pensar em qq webapplication em Java que vcs usem e é acostumado a tomar porrada. Pensem como se fosse qualquer porra: Tomcat, Jboss etc... e tentar formular um start que vcs acham que fique rasoável.

Sério, peço encarecidamente que RESPEITEM o tópico. Evitem colocar baboseiras e tals.





Never Ping is offline   Reply With Quote
Bombastic
The Alpha Male
 

04-01-06, 18:17 #2
pingo, o meu start eh o padrao, ateh pq a minha maquina serve como servidor local de homologacao(cada estacao de trabalho dos desenvolvedores serve como homologacao, usando cvs etc)


uma vez rolou um outofmemory nao tenho ideia real por que

oq eu fiz? chamei o GC na mao apos cada loop(dentro do loop eram feitas varias coisas e isso estava causando o OutOfMemory)

melhor solucao? nao sei
mas funcionou

Bombastic is offline   Reply With Quote
Never Ping
🌀 Trooper
 

Gamertag: Willian Braga PSN ID: Never_Ping XFIRE ID: neverping Steam ID: neverping
04-01-06, 18:33 #3
Quote:
Postado por Bombastic
pingo, o meu start eh o padrao, ateh pq a minha maquina serve como servidor local de homologacao(cada estacao de trabalho dos desenvolvedores serve como homologacao, usando cvs etc)


uma vez rolou um outofmemory nao tenho ideia real por que

oq eu fiz? chamei o GC na mao apos cada loop(dentro do loop eram feitas varias coisas e isso estava causando o OutOfMemory)

melhor solucao? nao sei
mas funcionou
Também já usei e funcionou até um certo ponto. Eu criei um JSP que fazia somente system.gc(), daí eu batia algo como http://webapplication:5569/gc.jsp. Funcionava há uns 2 anos atrás, mas atualmente isso não tem adiantado mais. O GC é feito, mas o uso de memória não tem sido tão gerenciado assim. Isso está diretamente ligado, até aonde acredito, em como a JVM está startada e como ela está setada para trabalhar no ambiente. Existem diversos parâmetros de start na JVM, que melhoram -e muito- o desempenho do webapplication, que estão já setados no ambiente.

Never Ping is offline   Reply With Quote
Bombastic
The Alpha Male
 

04-01-06, 21:47 #4
um deles padrao que eu ja li em alguns lugares é iniciar a jvm-server e nao a client

mas isso vc ja deve estar fazendo certo?

eu vou olhar depois que tenho uns links disso e te mando por msn

Bombastic is offline   Reply With Quote
un4
inativo
 

04-01-06, 23:54 #5
System.gc() somente "aumenta a probabilidade de rodar o gc".
Como ele depende de thread, nada é garantido.

Segundo a "un4's consultants inc", em 95% dos casos, problemas de performance/estouro de memória ocorrem em apenas 1% do código escrito. Tente indentificar essas zonas mortas e trabalhe nelas ao invés de buscar soluções genéricas. Cada caso é um caso.

un4 is offline   Reply With Quote
Never Ping
🌀 Trooper
 

Gamertag: Willian Braga PSN ID: Never_Ping XFIRE ID: neverping Steam ID: neverping
05-01-06, 06:45 #6
Quote:
Postado por Bombastic
um deles padrao que eu ja li em alguns lugares é iniciar a jvm-server e nao a client

mas isso vc ja deve estar fazendo certo?

eu vou olhar depois que tenho uns links disso e te mando por msn
Sim. java -server

Never Ping is offline   Reply With Quote
Bombastic
The Alpha Male
 

05-01-06, 07:45 #7
Quote:
Postado por un4
System.gc() somente "aumenta a probabilidade de rodar o gc".
Como ele depende de thread, nada é garantido.

Segundo a "un4's consultants inc", em 95% dos casos, problemas de performance/estouro de memória ocorrem em apenas 1% do código escrito. Tente indentificar essas zonas mortas e trabalhe nelas ao invés de buscar soluções genéricas. Cada caso é um caso.
exato
por isso eu chamava o gc dentro da thread que causava o out of memory

ESPERTAO EU

Bombastic is offline   Reply With Quote
Never Ping
🌀 Trooper
 

Gamertag: Willian Braga PSN ID: Never_Ping XFIRE ID: neverping Steam ID: neverping
05-01-06, 10:22 #8
Quote:
Postado por Bombastic
exato
por isso eu chamava o gc dentro da thread que causava o out of memory

ESPERTAO EU
E como vc fazia isso? S´odentro do código?

Never Ping is offline   Reply With Quote
Bombastic
The Alpha Male
 

05-01-06, 10:27 #9
Quote:
Postado por Never Ping
E como vc fazia isso? S´odentro do código?
sim

como eu disse no final dos loops das threads

solucao meio porca e provavelmente teria alguma melhor
mas o prazo estava estourando e eu tinha q entregar(ja estava pronto a mais tempo perdi anos tentando descobrir o pq do erro da memoria)

Bombastic is offline   Reply With Quote
relax'
Banned
 

05-01-06, 10:31 #10
 

relax' is offline   Reply With Quote
un4
inativo
 

05-01-06, 10:39 #11
Quote:
Postado por Bombastic
exato
por isso eu chamava o gc dentro da thread que causava o out of memory

ESPERTAO EU
Hm.. o GC É uma thread de baixa prioridade.. ele está sempre lá.
Usando System.gc() vc eleva a chance da thread dele rodar. Não tem diferença nenhuma vc chamar ele de uma outra thread qualquer.

Sei lá se você entendeu.. eu explico muito mal.

un4 is offline   Reply With Quote
Bombastic
The Alpha Male
 

05-01-06, 10:42 #12
Quote:
Postado por un4
Hm.. o GC É uma thread de baixa prioridade.. ele está sempre lá.
Usando System.gc() vc eleva a chance da thread dele rodar. Não tem diferença nenhuma vc chamar ele de uma outra thread qualquer.

Sei lá se você entendeu.. eu explico muito mal.
eu entendi

mas funcionou perfeitamente no java 5 e parou de dar os erros mas tutu peim

Bombastic is offline   Reply With Quote
Never Ping
🌀 Trooper
 

Gamertag: Willian Braga PSN ID: Never_Ping XFIRE ID: neverping Steam ID: neverping
05-01-06, 10:48 #13
Quote:
Postado por Bombastic
eu entendi

mas funcionou perfeitamente no java 5 e parou de dar os erros mas tutu peim
O Java tem um controle de heap fixo, fazendo GC conforme necessário e é a VM quem decide quando vai ocorrer o GC, se vai ser um parcial ou full. Os parâmentros que você passa para o start da VM pode então fazer com que este comportamento melhorem.

Por exemplo, um parâmetro valioso que tem é o AgressiveGC, mas a VM que eu uso não tem esse parâmetro infelizmente.


Last edited by Never Ping; 05-01-06 at 10:49.. Motivo: clarifiquei melhor a idéia.
Never Ping is offline   Reply With Quote
Bombastic
The Alpha Male
 

05-01-06, 10:51 #14
no meu caso mudar os parametros do start da VM nao estavam no escopo

alem do que era um relatorio pouco utilizado(poucas vezes por ano) entao nao foi de todo ruim oq eu fiz

funcionou, nao sei pq mas funcionou

Bombastic is offline   Reply With Quote
Responder


Regras de postagem
Você não pode criar novos tópicos
Você não pode postar
Você não pode enviar anexos
Você não pode editar seus posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Atalho para Fóruns



O formato de hora é GMT -3. horário: 06:27.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.