Heap Space sempre aumentando  XML
Índice dos Fóruns » Assuntos gerais (Off-topic)
Autor Mensagem
Hebertbc
JavaChild
[Avatar]

Membro desde: 07/11/2008 20:27:15
Mensagens: 113
Localização: Campo Grande / MS
Offline

Boa tarde, o titulo ja diz tudo, o sistema possui apenas 3 threads ativas (ServerSocket) que ficam aguardando a conexão de um cliente. O grafico abaixo mostra o sistema rodando por uma hora sem nenhuma atividade. Alguem saberia me explicar o que pode estar acontecendo?




Grato pela atenção


C'est la vie monsieur excentrique...
asaudate
GUJ Master
[Avatar]

Membro desde: 01/09/2007 19:31:41
Mensagens: 1794
Localização: São Paulo
Offline

Tem certeza de que esses Sockets não recebem absolutamente nenhum dado?

Já aplicou algum profiler?

[]'s

Alexandre Saudate
__________________________

Do not try to bend the spoon - that's impossible. Instead, only try to realize the truth: there is no spoon.

Série quickstart: Spring+Spring Security+Jersey (REST) +Hibernate (JPA) -> https://github.com/alesaudate/kickstart-springjerseyhibernate

Evite usar Axis2!!! Leia aqui para mais detalhes!

@alesaudate
Quer ler um blog especializado em web services e SOA?

Hebertbc
JavaChild
[Avatar]

Membro desde: 07/11/2008 20:27:15
Mensagens: 113
Localização: Campo Grande / MS
Offline

certeza, os sockets estao configurados pra trabalhar em blocking, tenho uma flag indicando qdo recebe alguma informação. E como assim aplicou algum profiler? Se quer dizer usar o profiler do netbeans, por exemplo, apresenta o mesmo grafico.

C'est la vie monsieur excentrique...
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

Você tem que fazer um profiler e ver qual tipo de dado está ocupando memória. Normalmente e alguma lista que esqueceu de liberar.

www.citrox.com.br
asaudate
GUJ Master
[Avatar]

Membro desde: 01/09/2007 19:31:41
Mensagens: 1794
Localização: São Paulo
Offline

Está rodando em Application Server ou standalone?

Alexandre Saudate
__________________________

Do not try to bend the spoon - that's impossible. Instead, only try to realize the truth: there is no spoon.

Série quickstart: Spring+Spring Security+Jersey (REST) +Hibernate (JPA) -> https://github.com/alesaudate/kickstart-springjerseyhibernate

Evite usar Axis2!!! Leia aqui para mais detalhes!

@alesaudate
Quer ler um blog especializado em web services e SOA?

Hebertbc
JavaChild
[Avatar]

Membro desde: 07/11/2008 20:27:15
Mensagens: 113
Localização: Campo Grande / MS
Offline

Ocupar um espaço da memoria blz, pq tenho varios Map, o que me chama a atenção é o gasto alto de memoria em standby, pq chega uma hora ke acaba alocando toda a memoria e ocasiona uma exceção.
E estou rodando em uma jvm standalone.

C'est la vie monsieur excentrique...
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

Hebertbc wrote:Ocupar um espaço da memoria blz, pq tenho varios Map, o que me chama a atenção é o gasto alto de memoria em standby, pq chega uma hora ke acaba alocando toda a memoria e ocasiona uma exceção.
E estou rodando em uma jvm standalone.

Você não espera que o gc libere automáticamente uma coleção de maps que estão referenciados em memória né!? Verifica se eles ainda estão alocados. Talvez você esteja adicionando nos maps e não está gerenciando o tamanho dele. Isso aí é um memory leak.

www.citrox.com.br
asaudate
GUJ Master
[Avatar]

Membro desde: 01/09/2007 19:31:41
Mensagens: 1794
Localização: São Paulo
Offline

juliocbq wrote:
Hebertbc wrote:Ocupar um espaço da memoria blz, pq tenho varios Map, o que me chama a atenção é o gasto alto de memoria em standby, pq chega uma hora ke acaba alocando toda a memoria e ocasiona uma exceção.
E estou rodando em uma jvm standalone.

Você não espera que o gc libere automáticamente uma coleção de maps que estão referenciados em memória né!? Verifica se eles ainda estão alocados. Talvez você esteja adicionando nos maps e não está gerenciando o tamanho dele. Isso aí é um memory leak.



Pra fazer o que o juliocbq está falando, você pode usar o JProfiler. Vai ser mais eficiente que o profiler do Netbeans

[]'s

Alexandre Saudate
__________________________

Do not try to bend the spoon - that's impossible. Instead, only try to realize the truth: there is no spoon.

Série quickstart: Spring+Spring Security+Jersey (REST) +Hibernate (JPA) -> https://github.com/alesaudate/kickstart-springjerseyhibernate

Evite usar Axis2!!! Leia aqui para mais detalhes!

@alesaudate
Quer ler um blog especializado em web services e SOA?

Hebertbc
JavaChild
[Avatar]

Membro desde: 07/11/2008 20:27:15
Mensagens: 113
Localização: Campo Grande / MS
Offline

juliocbq wrote:
Você não espera que o gc libere automáticamente uma coleção de maps que estão referenciados em memória né!? Verifica se eles ainda estão alocados. Talvez você esteja adicionando nos maps e não está gerenciando o tamanho dele. Isso aí é um memory leak.


Correto, porem os maps são estaticos.

asaudate wrote:Pra fazer o que o juliocbq está falando, você pode usar o JProfiler. Vai ser mais eficiente que o profiler do Netbeans

[]'s


Blz, vou testar aqui.

This message was edited 1 time. Last update was at 05/09/2011 10:06:22


C'est la vie monsieur excentrique...
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

Hebertbc wrote:
juliocbq wrote:
Você não espera que o gc libere automáticamente uma coleção de maps que estão referenciados em memória né!? Verifica se eles ainda estão alocados. Talvez você esteja adicionando nos maps e não está gerenciando o tamanho dele. Isso aí é um memory leak.


Correto, porem os maps são estaticos.

asaudate wrote:Pra fazer o que o juliocbq está falando, você pode usar o JProfiler. Vai ser mais eficiente que o profiler do Netbeans

[]'s


Blz, vou testar aqui.


ok, mas o que os impedem de expandirem?

www.citrox.com.br
Hebertbc
JavaChild
[Avatar]

Membro desde: 07/11/2008 20:27:15
Mensagens: 113
Localização: Campo Grande / MS
Offline

Os Map não espandem pois são dados estaticos, para dados dinamicos possuo outros Map (exemplo: lista de clientes conectados)

O sistema funciona assim:

-Inicio do sistema, carrego os dados em Map estaticos
-Sistema em standby aguardando a conexão de algum cliente

caso algum cliente conecte:
-cliente conecta
-Inicia uma thread para o cliente
-cliente executa suas ações, comunicação via sockets
-cliente desconecta, caso o cliente criou alguma thread, todas sao finalizadas

Porem apenas iniciando o sistema, sem nenhuma conexão (certeza!), o mesmo apresenta esse grafico, e como pode ver deixei ele parado por mais de 1h.

This message was edited 1 time. Last update was at 05/09/2011 15:35:12


C'est la vie monsieur excentrique...
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

Hebertbc wrote:Os Map não espandem pois são dados estaticos, para dados dinamicos possuo outros Map (exemplo: lista de clientes conectados)

O sistema funciona assim:

-Inicio do sistema, carrego os dados em Map estaticos
-Sistema em standby aguardando a conexão de algum cliente

caso algum cliente conecte:
-cliente conecta
-Inicia uma thread para o cliente
-cliente executa suas ações, comunicação via sockets
-cliente desconecta, caso o cliente criou alguma thread, todas sao finalizadas

Porem apenas iniciando o sistema, sem nenhuma conexão (certeza!), o mesmo apresenta esse grafico, e como pode ver deixei ele parado por mais de 1h.


A keyword static só garante que você terá um endereço de memoria, não que ele não possa crescer se você adicionar objetos a ele. Verifica se você não esqueceu de gerênciar esses maps em algum momento.

www.citrox.com.br
Hebertbc
JavaChild
[Avatar]

Membro desde: 07/11/2008 20:27:15
Mensagens: 113
Localização: Campo Grande / MS
Offline

qual sua definição para gerenciar? desculpe-me a pergunta ^^

obs: quando digo 'dados estaticos', é com garantia que não serao modificados, apenas referenciados por outros objetos.

This message was edited 1 time. Last update was at 06/09/2011 08:48:10


C'est la vie monsieur excentrique...
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

Hebertbc wrote:qual sua definição para gerenciar? desculpe-me a pergunta ^^

obs: quando digo 'dados estaticos', é com garantia que não serao modificados, apenas referenciados por outros objetos.



Quando você disse estatico imaginei que fossem static.
Quando você usar a jvisualvm, no profiler existe uma opção para ver o que esta alocado na heap. Com base nó tipo do dado voce Vai ter ideia do objeto que mais aloca em um curto espaço de tempo. A regra e não deixar nenhum conteiner referenciado por outro objeto. O gc só coleta o que não possui contador de referencia.

www.citrox.com.br
 
Índice dos Fóruns » Assuntos gerais (Off-topic)
Ir para:   
Powered by JForum 2.1.8 © JForum Team