Ola pessoal do Guj ,
Tudo Bem !!!
Sou iniciante em Java e estou fazendo um pequeno programa que pretendo deixar rodando no servidor , mas estou tendo problemas com memory leak.
O programa tem uma Thread que fica monitorando em um loop while o tamanho de 2 arquivos de logs (obtem o tamanho do arquivo e depois obtem novamente o tamanho do mesmo arquivo se for diferente esqueva em uma variavel string).
No main do programa ele fica aguardando alguma por conexões e apos receber conexão com o cliente cria uma thread para tratar esse cliente que ira ler
o valor da variavel string da outra Thread para saber se houve ou não alteração dos arquivos.
O teste que eu realizei foi assim:
Startei o programa o qual starta a Thread que fica em loop infinito monitorando os arquivos , em quanto isso o main fica aguardando o cliente.
Mesmo sem conectar nenhum o cliente o programa vai consumindo cada vez mais e mais memoria do sistema.
Segue abaixo o codigo da Thread que monitora os arquivos:
import java.io.*;
public class MonitAuto implements Runnable
{
String mensagem = "";
public synchronized String getMsg()
{
String msg;
msg = mensagem;
mensagem = "";
return msg;
}
public void run()
{
// String mensagem = "";
long varOs1,varOs2;
File fos1 = new File("putty_os1.log");
File fos2 = new File("putty_os2.log");
// Connect net = new Connect();
varOs1 = fos1.length();
varOs2 = fos2.length();
while(true)
{
if(varOs1 != fos1.length() )
{
varOs1 = fos1.length();
System.out.println("Diferente1");
// net.sendMsgNet("<Os1>");
mensagem = "<Os1>";
}
if(varOs2 != fos2.length() )
{
varOs2 = fos2.length();
System.out.println("Diferente2");
//net.sendMsgNet("<Os2>");
mensagem = "<Os2>";
}
try{
Thread.sleep(1000);
// System.gc();
}catch (InterruptedException e)
{
System.out.println(e);
}
}
}
}
Não sei o que esta errado.