tail: inotify non può essere utilizzato, tornando al polling: troppi file aperti

9

Quando provo a tail -f catalina.out , ottengo l'errore:

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

Ho provato la risposta in questo post: Troppi file aperti - come trovare il colpevole

lsof | awk '{ print ; }' | sort -rn | uniq -c | sort -rn | head

Quando ho eseguito il comando precedente, l'output era

17 6115

13 6413

10 6417

10 6415

9 6418

9 6416

9 6414

8 6419

4 9 

4 8

Non vedo nessun processo con 1024 file aperti. Il numero di file non è 17,13,10,10,9? O lo capisco male? E tutti questi erano bash, sshd, apache2, tomcat aveva il numero 4.

Ho anche fatto lsof | grep tail | wc -l che ha restituito 20 . Questi numeri non sono enormi, quindi perché tail -f catalina.out fallisce?

    
posta gbag 24.05.2013 - 23:56

6 risposte

11

Questo è stato risolto per me seguendo le istruzioni sul link

Soluzione permanente (preservata durante i riavvii) Aggiunta linea:

fs.inotify.max_user_watches=1048576

a:

/etc/sysctl.conf

fissato il valore limite in modo permanente (anche tra i riavvii).

quindi fai un

sysctl -p
    
risposta data Elan Hasson 06.10.2016 - 22:56
9

Penso che la risposta non sia completa (non dice nulla sul limite massimo di file aperti sul sistema).

Ci sono due limiti per quanto riguarda il numero massimo di file aperti:

  1. Limite massimo di file aperti per processo .

    • Puoi vedere quale è il valore di questo limite utilizzando: ulimit -n
    • Puoi modificare questo limite utilizzando: ulimit -n new_limit_number
    • Ecco un comando per ottenere i primi 10 processi con molti file aperti:

      lsof | awk '{ print ; }' | sort -rn | uniq -c | sort -rn | head
      
  2. Limite massimo di file aperti per sistema .

    • Puoi vedere quale è il valore di questo limite utilizzando: cat /proc/sys/fs/file-max
    • Puoi modificare questo limite utilizzando: echo new_limit_number > /proc/sys/fs/file-max
    • Conta tutti gli handle di file aperti: lsof | wc -l
risposta data Radu Rădeanu 20.09.2013 - 14:10
6

Molto probabilmente, hai esaurito gli inotify orologi. Probabilmente, stai eseguendo alcuni strumenti di sincronizzazione dei file (ad esempio Dropbox) in background?

In Linux, l'implementazione interna del comando tail -f utilizza il meccanismo inotify per impostazione predefinita, in modo da monitorare le modifiche ai file. Se hai esaurito tutti gli inotify orologi (8192 per impostazione predefinita), inotify -f deve passare al polling per rilevare le modifiche a quel file.

Ovviamente, puoi modificare il numero massimo di inotify orologi.

riferimento:
link
link
link

    
risposta data zeekvfu 04.12.2013 - 16:42
3

sysctl fs.inotify.max_user_instances otterrebbe un limite per utente per inotify .

L'ho sperimentato, e tutti i limiti del sistema erano abbastanza alti, ma l'impostazione per utente di solito è relativamente bassa, puoi aumentarla in sysctl.conf e ricaricarla con sysctl -p .

    
risposta data JBat 12.03.2016 - 18:08
2

Esegui

ps aux | grep tail

per controllare se troppi comandi tail in esecuzione, come uno spawn di crontab.

    
risposta data tangxinfa 13.12.2016 - 07:31
0

Controlla la versione del tuo kernel, potrebbe essere questo bug:

link

    
risposta data thom 24.11.2013 - 04:43

Leggi altre domande sui tag