Troppi file aperti: come trovare il colpevole


69

Durante l'esecuzione tail -f filename, ho ricevuto il seguente messaggio:

tail: inotify cannot be used, reverting to polling: Too many open files

È un potenziale problema?

Come faccio a diagnosticare ciò che è responsabile di tutti i file aperti? Ho un elenco di processi sospetti, ma se non si rivelano essere i colpevoli, le istruzioni che non si basano sulla conoscenza di quale processo controllare sarebbero utili.


1
Hai aumentato il numero di descrittori di file disponibili tramite ulimit?
Ignacio Vazquez-Abrams,

2
@ IgnacioVazquez-Abrams Potrebbe essere utile per altri utenti, ma per me sarebbe come trattare il sintomo piuttosto che la malattia.
Andrew Grimm,

Sebbene non ti sbagli, a volte le app hanno motivi legittimi per l'apertura di molti file.
Ignacio Vazquez-Abrams,

Risposte:


72

Puoi usare lsof per capire chi sta aprendo così tanti file. Di solito è un server (web) che apre così tanti file, ma lsof ti aiuterà sicuramente a identificare la causa.

Una volta capito chi è il cattivo che puoi

Se l'output di lsof è piuttosto grande, prova a reindirizzarlo su un file e quindi apri il file

Esempio (potrebbe essere necessario Ctrl+ Cil primo comando)

lsof > ~/Desktop/lsof.log
cat ~/Desktop/lsof.log | awk '{ print $2 " " $1; }' | sort -rn | uniq -c | sort -rn | head -20
vim ~/Desktop/lsof.log

37
Per i più pigri:lsof | awk '{ print $2; }' | uniq -c | sort -rn | head
iniziato il

1
Ho avuto lo stesso errore e l'utilizzo di ulimit non funziona. Il comando tail -F restituisce ancora l'errore. Ho aumentato il limite da 1024 a 3000, quindi immagino di avere abbastanza spazio per allora ... Immagino che dovrei riavviare!
Alexis Wilke,

15
Ho trovato utile la linea di itsadok, ma penso che dovresti prima ordinare (perché uniqfunziona solo con linee adiacenti), eseguire uniq, quindi riordinare. Così lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head.
Tyler Collier,

19
Ordinare e contare il maggior numero di file aperti è sicuramente la cosa migliore da fare. Mostra nome processo e pid: '' 'lsof | awk '{print $ 2 "" $ 1; } '| ordina -rn | uniq -c | ordina -rn | head -20 '' '
gaoithe

2
@gaoithe se la metti in una risposta, la voterò volentieri:)
Matt Ball

23

Nel caso in cui qualcun altro ne abbia bisogno ...

ulimit -a

Visualizzerà tutti i limiti attuali. Specificamente ulimit -n 70000imposterà il limite del descrittore di file.

Anche...

cat /proc/sys/fs/file-max

Visualizzerà / imposterà il limite del kernel se modificato.

sudo echo 200000 > /proc/sys/fs/file-max

Una spiegazione molto più dettagliata può essere trovata a ...

Come posso aumentare il limite di file aperti per un utente non root?


3
ci sono ulimits in modo da poter mantenere uno stretto controllo sull'uso delle risorse nel sistema. È preferibile aumentarli singolarmente per i processi che è necessario utilizzare molti descrittori di file. Tenendoli stretti nei test, troverai processi che potrebbero colare costantemente nel tempo descrittori di file. Si noti inoltre che gli handle di file vengono utilizzati per qualsiasi accesso al dispositivo in unix / linux. ad es. ogni socket di rete aperto da un processo utilizza un handle di file. Questo spiega perché è possibile colpire i "troppi file aperti" in caso di normali file di file system e di qualsiasi file di dispositivo come connessioni di rete.
Goaithe,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.