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
Tem certeza de que esses Sockets não recebem absolutamente nenhum dado?
Já aplicou algum profiler?
[]'s
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.
Você tem que fazer um profiler e ver qual tipo de dado está ocupando memória. Normalmente e alguma lista que esqueceu de liberar.
Está rodando em Application Server ou standalone?
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.
[quote=Hebertbc]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.[/quote]
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.
[quote=juliocbq][quote=Hebertbc]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.[/quote]
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. [/quote]
Pra fazer o que o juliocbq está falando, você pode usar o JProfiler. Vai ser mais eficiente que o profiler do Netbeans 
[]'s
[quote=juliocbq]
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. [/quote]
Correto, porem os maps são estaticos.
[quote=asaudate]Pra fazer o que o juliocbq está falando, você pode usar o JProfiler. Vai ser mais eficiente que o profiler do Netbeans 
[]'s[/quote]
Blz, vou testar aqui.
[quote=Hebertbc][quote=juliocbq]
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. [/quote]
Correto, porem os maps são estaticos.
[quote=asaudate]Pra fazer o que o juliocbq está falando, você pode usar o JProfiler. Vai ser mais eficiente que o profiler do Netbeans 
[]'s[/quote]
Blz, vou testar aqui.[/quote]
ok, mas o que os impedem de expandirem?
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.
[quote=Hebertbc]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.[/quote]
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.
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.
objDinamico{
atbDinamico
...
atbEstatico
...
}
objEstatico{
atbEstatico (regra: nunca relaciona um objeto dinamico)
...
[quote=Hebertbc]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.
[code]
objDinamico{
atbDinamico
…
atbEstatico
…
}
objEstatico{
atbEstatico (regra: nunca relaciona um objeto dinamico)
…
[/code][/quote]
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.