2012-08-22 18 views
65

provo ad installare Intel MPI Benchmark nel mio computer e ricevo l'errore:forcella: riprovare: Risorsa temporaneamente non disponibile

fork: retry: Resource temporarily unavailable 

Poi ho ricevere nuovamente questo errore quando ho eseguito ls e top comando.

Che cosa sta causando questo errore?

configurazione mia macchina:

Dell precision T7500 
Scientific Linux release 6.2 (Carbon) 
+0

Controlla la documentazione di Linux su come aumentare il numero di processi. – theglauber

+1

Forse questo avrebbe aiutato: http://stackoverflow.com/questions/344203/maximum-number-of-threads-per-process-in-linux – theglauber

risposta

63

Questo è comunemente causato da corto di descrittori di file.

Ci

è sistemi totali limite descrittore di file, che cosa si ottiene dal comando:

sysctl fs.file-nr 

Ciò restituisce conti di descrittori di file:

<in_use> <unused_but_allocated> <maximum> 

per scoprire ciò che un file di utenti descrittore limite è eseguire i comandi:

sudo su - <username> 
ulimit -Hn 

Per scoprire quanti descrittori di file s sono in uso da parte di un utente esegue il comando:

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

Così ora se si stanno avendo un problema di limite descrittore di file system è necessario modificare il file /etc/sysctl.conf e aggiungere, o modificarlo è esiste già una riga con fs.file-max e impostarla su un valore abbastanza grande da gestire il numero di descrittori di file necessari e il riavvio.

fs.file-max = 204708 
+9

FYI, è possibile utilizzare "sysctl -p" da applicare le impostazioni correnti in /etc/sysctl.conf salvando il riavvio. – EmmEff

+2

Inoltre, se si ha solo la lettura/etc, è possibile utilizzare 'sysctl -w fs.file-max = 204708' in fase di esecuzione. –

39

Un'altra possibilità è troppi thread. Abbiamo appena trovato questo messaggio di errore durante l'esecuzione di un'imbracatura di test contro un'app che utilizza un pool di thread. Abbiamo usato

watch -n 5 -d "ps -eL <java_pid> | wc -l"

per vedere il conteggio in corso del thread native Linux in esecuzione all'interno del data Java ID di processo. Dopo questo hit di circa 1.000 (per noi - YMMV), abbiamo iniziato a ricevere il messaggio di errore che hai citato.

+2

Quando ho provato, 'ps -eL' ha funzionato per mostrare tutti i processi e' ps -L 'ha funzionato per mostrare i processi riguardanti' '. 'ps -eL ' mostra solo tutti i processi indipendentemente da ''. –

+1

@Willie Wheeler Che cosa hai fatto per superare il limite di thread? Ho cercato e testato numerose soluzioni trovate online, inutilmente, per GIORNI. Nulla consentirà più di 1k thread, ad eccezione del riavvio di systemd-logind, che dura circa un'ora prima che gli errori ricominciano! –

+0

Le macchine hanno risorse limitate. Se stai colpendo un limite, usa meno thread (ad esempio controllato con pool di thread) o più macchine. –

Problemi correlati