socket java

mi socket hecho en java llevaba casi 15 dias si molestar con 800 equipos mandandoles transacciones y todo bien pero hoy reportaron caida en el sistema fue y revise hicel un telnet a mi listener al puerto definido para tal caso y muerto no respondio me toco reiniciar el listener y todo a la normalidad.

mi pregunta es revise y no econtre ni exciones ni nada raro alguien sabe que pudo pasar ????

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Estas grabando los logs de tu

Estas grabando los logs de tu servidor en algún lado? Si hubiera una falta de memoria, la registrarías? Lo has intentado?

Probablemente tuviste un outofmemory error, pero lo más sencillo sería que monitorees tu servidor.

no encontre log

no encontre log que me indicara algo claro.
cual seria la mejor forma o la forma correcta de cerrar conexiones tanto del cliente como del server??
tengo configurado mi server con un timepout de 5 seg mi cliente envia peticin recibe respuesta y cierro conexion de lado del cliente
 

lo que no se es porque cuando entra por finally se imprime dos veces
System.out.println("Cerrrada la conexion.");

outofmemory

donde se trataria esa exception outofmemory en mi socket???

Imagen de ezamudio

outofmemory

outofmemory no lo tratas con tu socket. outofmemory es que se quedó sin memoria la JVM. Eso es síntoma de que no estás liberando recursos, tienes alguna "fuga", se están quedando objetos alojados en memoria que ya no estás usando y después de un rato se queda sin memoria tu aplicación. Eso es bastante complicado de detectar; tal vez con jconsole puedas encontrar algo si lo conectas a tu app corriendo varias veces al día para ver el uso de memoria y si va creciendo pues ver si hay alguna clase en particular que sea la que tiene muchas instancias y eso te puede dar una idea de dónde está el problema.

Un parche relativamente sencillo para evitar esos problemas es que reinicies periódicamente tu aplicación. Por ejemplo si en las noches nadie se conecta, puedes hacer que "se suicide" al haber un periodo largo de inactividad (5 minutos por ejemplo). Y obvio requieres un proceso externo que detecte cuando se muere tu aplicación para que la reinicie; de esa forma si se llega a morir por algún error como ya te ocurrió, el proceso externo la levanta de nuevo.