Otra posibilidad es demasiados hilos. Acabamos de encontrar este mensaje de error cuando ejecutamos un arnés de prueba en una aplicación que usa un grupo de subprocesos. Usamos
watch -n 5 -d "ps -eL <java_pid> | wc -l"
para ver el recuento continuo de subprocesos nativos de Linux que se ejecutan dentro del ID de proceso de Java dado. Después de que esto llegó a alrededor de 1000 (para nosotros, YMMV), comenzamos a recibir el mensaje de error que mencionas.
Esto es comúnmente causado por quedarse sin descriptores de archivo.
Existe el límite de descriptor de archivo total del sistema, ¿qué obtiene del comando:
sysctl fs.file-nr
Esto devuelve recuentos de descriptores de archivos:
<in_use> <unused_but_allocated> <maximum>
Para averiguar cuál es el límite del descriptor de archivo de un usuario, ejecute los comandos:
sudo su - <username>
ulimit -Hn
Para averiguar cuántos descriptores de archivo está utilizando un usuario, ejecute el comando:
sudo lsof -u <username> 2>/dev/null | wc -l
Entonces, si tiene un problema con el límite del descriptor del archivo del sistema, deberá editar su archivo /etc/sysctl.conf y agregar, o modificarlo si ya existe, una línea con fs.file-max y establecerlo en un valor grande. suficiente para manejar la cantidad de descriptores de archivo que necesita y reiniciar.
fs.file-max = 204708