tail: inotify kullanılamaz, yoklamaya geri döner: Çok fazla açık dosya


16

Denediğimde tail -f catalina.outhatayı alıyorum:

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

Bu yazıda cevabı denedim: Çok fazla açık dosya - suçlu nasıl bulunur

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

Yukarıdaki komutu çalıştırdığımda çıktı

17 6115

13 6413

10 6417

10 6415

9 6418

9 6416

9 6414

8 6419

4 9 

4 8

1024 dosya açık bir işlem görmüyorum. Dosya sayısı 17,13,10,10,9 değil mi? Yoksa yanlış mı anlıyorum? Ve bunların hepsi bash, sshd, apache2, tomcat 4 numaraya sahipti.

Ben de lsof | grep tail | wc -l geri döndü yaptı 20. Bu sayılar çok büyük değil, neden tail -f catalina.outbaşarısız oluyor?

Yanıtlar:


17

Bu benim için http://peter-butkovic.blogspot.com/2013/08/tail-inotify-resources-exhausted.html adresindeki talimatları uygulayarak çözüldü.

Kalıcı çözüm (yeniden başlatmalarda korunur) Çizgi ekleme:

fs.inotify.max_user_watches=1048576

için:

/etc/sysctl.conf

limit değeri kalıcı olarak sabitledi (yeniden başlatmalar arasında bile).

o zaman bir

sysctl -p

1
Dosya tanımlayıcılarını artırmak bana yardımcı olmaz. Benim tailmesaj biraz farklıydı: tail: inotify resources exhausted. Bu cevap bana yardımcı oldu. sudo sysctl -w fs.inotify.max_user_watches=1048576 && sysctl -pKalıcı olarak değiştirmeden yardımcı olup olmadığını test etmek için de kullanabilirsiniz . Bu yazı aynı zamanda nefaria.com/2014/08/tail-inotify-resources-exhausted
Ruslan Stelmachenko

9

Yanıtın tam olmadığını düşünüyorum (sistemde açılan dosyaların maksimum sınırı hakkında hiçbir şey söylemiyor).

Maksimum açık dosya sayısı ile ilgili iki sınır vardır:

  1. İşlem başına maksimum dosya sınırı .

    • Aşağıdakileri kullanarak bu sınırın değerinin hangisi olduğunu görebilirsiniz: ulimit -n
    • Bu sınırı aşağıdakileri kullanarak değiştirebilirsiniz: ulimit -n new_limit_number
    • İşte birçok dosya açık en iyi 10 işlemi almak için bir komut:

      lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head
  2. Sistem başına açık maksimum dosya sınırı .

    • Aşağıdakileri kullanarak bu sınırın değerinin hangisi olduğunu görebilirsiniz: cat /proc/sys/fs/file-max
    • Bu sınırı aşağıdakileri kullanarak değiştirebilirsiniz: echo new_limit_number > /proc/sys/fs/file-max
    • Tüm açık dosya tanıtıcılarını say: lsof | wc -l

6

Büyük olasılıkla, inotifysaatleriniz bitti . Muhtemelen, arka planda bazı dosya senkronizasyon araçları (örn. Dropbox) çalıştırıyorsunuz?

Linux'ta, tail -fkomutun dahili uygulaması , inotifymekanizmayı dosya değişikliklerini izlemek için varsayılan olarak kullanır. Tüm inotifysaatleriniz tükendiyse (varsayılan olarak 8192), inotify -fo dosyadaki değişiklikleri tespit etmek için yoklamaya geçmeniz gerekir.

Tabii ki, maksimum inotifysaat sayısını değiştirebilirsiniz .

başvuru:
http://www.quora.com/How-is-tail-f-implemented
http://peter-butkovic.blogspot.com/2013/08/tail-inotify-resources-exhausted.html
https: // serverfault.com/questions/510708/tail-inotify-cannot-be-used-reverting-to-polling-too-many-open-files


3

sysctl fs.inotify.max_user_instancesiçin kullanıcı başına sınır alır inotify.

Bunu deneyimledim ve tüm limit sistemi yeterince yüksekti, ancak kullanıcı tarafından ayar genellikle varsayılan olarak nispeten düşük, onu artırabilir sysctl.confve beyaza yeniden yükleyebilirsiniz sysctl -p.


3

Çalıştırmak

ps aux | grep tail

crontab tarafından bir spawn gibi çok fazla kuyruk komutunun çalışıp çalışmadığını kontrol etmek için.


ha bu gerçekten işe yaradı, çok fazla dosya kuyrukluydu
Alexander Mills

Verileri nasıl çevirebilirim? Her bir bilgi parçasının ne anlama geldiğini ve bu konuda ne yapılacağını açıklayabilir misiniz? Örneğin:root 20161 0.0 0.0 11132 1044 pts/0 S+ 17:27 0:00 grep tail
Christia

Sadece ÇOK MANY işlem eşleşiyorsa, eşleşen satır "grep" komutunun kendisi tarafından oluşturulur. Lütfen bunun yerine "pgrep tail" komutunu kullanın.
tangxinfa

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.