fork: retry: recurso temporalmente no disponible [cerrado]

80

Intenté instalar Intel MPI Benchmark en mi computadora y recibí este error:

fork: retry: Resource temporarily unavailable

Luego recibí este error nuevamente cuando ejecuté lsy topordené.

Que esta causando este error?

Configuración de mi máquina:

Dell precision T7500
Scientific Linux release 6.2 (Carbon)
usuario1260391
fuente
Consulte su documentación de Linux sobre cómo aumentar el número de procesos.
theglauber
2
Quizás esto ayudaría: stackoverflow.com/questions/344203/…
theglauber

Respuestas:

82

Esto se debe comúnmente a la falta de descriptores de archivo.

Existe el límite total de descriptores de archivos del sistema, ¿qué se obtiene del comando:

sysctl fs.file-nr

Esto devuelve recuentos de descriptores de archivo:

<in_use> <unused_but_allocated> <maximum>

Para averiguar cuál es el límite de descriptores de archivos de usuarios, ejecute los comandos:

sudo su - <username>
ulimit -Hn

Para saber cuántos descriptores de archivos está usando un usuario, ejecute el comando:

sudo lsof -u <username> 2>/dev/null | wc -l

Entonces, si tiene un problema de límite de descriptor de archivos del sistema, deberá editar su archivo /etc/sysctl.conf y agregar, o modificarlo, 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
Satish
fuente
15
FYI, puede usar "sysctl -p" para aplicar la configuración actual en /etc/sysctl.conf guardando el reinicio.
EmmEff
2
Además, si solo tiene lectura / etc, puede usar 'sysctl -w fs.file-max = 204708' en tiempo de ejecución.
Ondrej Galbavý
también puede agregarlo directamente al kernel sin reiniciar pero no permanentemente 'echo 999999> / proc / sys / fs / file-max'
matson kepson
50

Otra posibilidad son demasiados hilos. Nos encontramos con este mensaje de error al ejecutar un arnés de prueba en una aplicación que utiliza un grupo de subprocesos. Nosotros 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 Java dado. Después de este golpe alrededor de 1,000 (para nosotros - YMMV), comenzamos a recibir el mensaje de error que menciona.

roottraveller
fuente
2
Cuando probé, ps -eLtrabajé para mostrar todos los procesos y ps -L <pid>trabajé para mostrar los procesos relacionados con <pid>. ps -eL <pid>solo muestra todos los procesos independientemente del <pid>.
Sanghyun Lee
1
@Willie Wheeler ¿Qué hiciste para superar el límite de subprocesos? He estado buscando y probando numerosas soluciones en línea, sin éxito, durante DÍAS. Nada permitirá más de 1k subprocesos, excepto un reinicio de systemd-logind, que dura aproximadamente una hora antes de que los errores comiencen de nuevo.
Brandon Elliott
Las máquinas tienen recursos finitos. Si está alcanzando un límite, use menos subprocesos (por ejemplo, controlados con grupo de subprocesos) o más máquinas.
Reinicié
2
Sin embargo
frankster