Lo más probable es que
- Abrir enchufes y no cerrarlos. Con el tiempo, la cantidad de sockets abiertos aumenta demasiado y la aplicación falla.
- Estás abriendo demasiados sockets al mismo tiempo. Tal vez porque tienes un montón de hilos.
Voy a adivinar que es el número 1. Vuelva a verificar su código y asegúrese de cerrar todos sus objetos Connection y ResultSet.
Si se encuentra con el n. ° 2, entonces puede considerar usar menos subprocesos (después de cierto punto, tener demasiados subprocesos hace más daño que bien) o usar un grupo de conexiones como c3p0 que solo creará un número determinado de conexiones y permitirá que sus hilos las compartan. Usar c3p0 es una buena idea en general y también debería permitirle detectar #1 más rápido.
Una tercera opción es utilizar una abstracción de mayor nivel, como JPA o JDO, que se encargará de la gestión de la conexión por usted.