Se o null pointer ocorreu devido a estourar o número de conexões com o banco pode até ser. Sem ter o stack trace dessas null pointer exceptions fica difícil adivinhar.
Jedi_FeniX
No catalina.out só tem isso mesmo, eu acho que não foi nada em relação ao banco não, porque a conexão eu faço com JDBC puro, então, eu abro e fecho as conexões se não conseguir abrir espero e tento novamente, e outros máquinas com a mesma aplicação também usam o mesmo banco.
T
thingol
Aham… o problema, obviamente, não é abrir a conexão, e sim fechar. Você fecha tudo direitinho? Usa finally?
Jedi_FeniX
Sim, quando o problema era conexão, acabava dando problema nas três máquinas que usavam o banco de dados.
Eu faço requisições sockets será que o problema é isso?
Achei no log que teve várias requisições que receberam “null” como resposta do servidor, será que pode ter sido isso?
Quando é gerada várias exceptions deste tipo o heap da jvm pode ser “consumido”? E com isso gerar falta de memória?
T
thingol
Se você usar ObjectInputStream / ObjectOutputStream, por exemplo, você pode ter problemas sérios de “vazamento de memória”. Você usa alguma dessas coisas sem usar também o método “reset” ?
Jedi_FeniX
Eu uso o “OutputStreamWriter” e o “InputStreamReader”.
No meu código a parte que usa estes dois objestos está assim:
this.socket = new Socket(this.getIp(), this.getPort());
this.socket.setSoTimeout(500000);
this.toServer = new PrintWriter(new OutputStreamWriter(this.socket.getOutputStream()));
this.toServer.flush();
this.fromServer = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
klayrocha
Could not reserve enough space for object heap
Isso é falta de memória !
T
thingol
De qualquer maneira, usar sockets é sempre meio complicado, porque os dois lados (cliente e servidor) devem ser cuidadosamente escritos de modo que não fiquem “sockets pendurados” (isso você pode constatar com o netstat).
Pode ser que você precise revisar sua aplicação que usa sockets para usar “TCP No Delay” (setTcpNoDelay), e também “Shutdown” (shutdownOutput, shutdownInput). Você precisa achar um fonte de uma aplicação que use isso direito para poder ver como é que isso é feito.
Falta de memória eu sei que foi mas queria tentar entender o porque.
Jedi_FeniX
Mesmo matando a conexão do socket a conexão fica presa? E eu estou fazendo requisições socket para um servidor apache.
T
thingol
Então… depende. Você precisa ver se está chamando os “shutdownInput/shutdownOutput” adequadamente.
Para chamar um servidor Apache, normalmente (para evitar essas problemáticas de sockets) costuma-se usar uma URLConnection mesmo, que já usa o protocolo http ou https, dependendo de como você fez a configuração da URL.
Jedi_FeniX
Eu chamo o método close, dos dois objetos, para fechar a conexão.
E em relação a requisição é um HTTP GET normal.