Batas pengguna jam tangan tidak sah tercapai di Ubuntu 16.04

43

Saya baru saja menginstal Ubuntu 16.04 dan saya mendapatkan peringatan ini ketika saya memulai SmartGit :

IOException: User limit of inotify watches reached

Selain itu saya mendapatkan peluncuran peringatan ini tail -f:

tail: inotify resources exhausted 

tail: inotify cannot be used, reverting to polling

Saya tidak pernah mendapatkan kesalahan ini dengan Ubuntu 14.04 dan aplikasi dan file yang saya gunakan pada Ubuntu baru sama persis dengan yang saya gunakan di versi sebelumnya.

Satu-satunya perbedaan yang relevan adalah saya menambahkan Hard Disk tambahan pada PC dan saya mengkonfigurasi alat cadangan Ubuntu. Bisakah masalah ini terkait dengan disk kedua atau dengan alat cadangan?

Andrea
sumber

Jawaban:

76

Default saat ini pada Xenial adalah 8192 (lihat fs / notify / inotify / inotify_user.c di sumber kernel), Anda dapat memverifikasi ini dengan mencetak file ke stdout:

cat /proc/sys/fs/inotify/max_user_watches
8192

Anda dapat meningkatkan jumlahnya, misalnya, menggandakan ini menjadi 16384, menggunakan:

echo 16384 | sudo tee /proc/sys/fs/inotify/max_user_watches

ingatlah bahwa jam tangan yang tidak sah menghabiskan memori, saya pikir itu sekitar 160 byte per jam pada sistem 64 bit.

Untuk mengatur ini secara permanen, tambahkan entri ke /etc/sysctl.conf, misalnya:

echo fs.inotify.max_user_watches=16384 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

..atau mengedit secara manual /etc/sysctl.conf(Anda perlu hak root untuk memperbaruinya) dan kemudian jalankansudo sysctl -p

Colin Ian King
sumber
Ya terima kasih. Saya menggandakannya dan sekarang saya tidak memiliki peringatan lagi. Berapa banyak memori (maksimal) yang akan dikonsumsi untuk 16.384 jam? Perhitungan saya memberi saya lebih atau kurang 2.5MB . Apakah tepat?
Andrea
Sesuatu dalam urutan itu, ditambah beberapa overhead; itu tidak terlalu besar dalam skema besar hal.s
Colin Ian King
inilah beberapa info lebih lanjut tentang kemungkinan konsumsi memori dari jam tangan (bekas) askubuntu.com/questions/154255/…
michael
11

Jawaban di atas berfungsi dengan baik tetapi tidak menjelaskan mengapa saya mencari-cari jawaban saya di sini -

Mengapa?

Program yang menyinkronkan file seperti dropbox, git dll menggunakan inotify untuk melihat perubahan pada sistem file. Batas bisa dilihat oleh -

cat /proc/sys/fs/inotify/max_user_watches

Bagi saya, ini menunjukkan 100000 . Ketika batas ini tidak cukup untuk memantau semua file di dalam direktori, ia melempar kesalahan ini.


Meningkatkan jumlah pengamat yang tidak memberi tahu (Versi singkat):

Jika Anda menjalankan Debian, RedHat, atau distribusi Linux serupa lainnya , jalankan yang berikut ini di terminal:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Jika Anda menjalankan ArchLinux , jalankan perintah berikut sebagai gantinya (lihat di sini untuk alasannya):

echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system

Kemudian tempel di terminal Anda dan tekan enter untuk menjalankannya.


Rincian teknis:

Dengarkan menggunakan inotify secara default di Linux untuk memantau direktori untuk perubahan. Tidak jarang Anda menemukan batas sistem pada jumlah file yang dapat Anda pantau. Sebagai contoh, batas inotify Ubuntu Lucid (64bit) diatur ke 8192.

Anda bisa mendapatkan batas waktu tontonan file tidak sah saat ini dengan menjalankan:

$ cat /proc/sys/fs/inotify/max_user_watches

Ketika batas ini tidak cukup untuk memantau semua file di dalam direktori, batas tersebut harus ditingkatkan agar Dengarkan berfungsi dengan baik.

Anda dapat menetapkan batas baru sementara dengan:

$ sudo sysctl fs.inotify.max_user_watches=524288
$ sudo sysctl -p

Jika Anda ingin menjadikan batas Anda permanen, gunakan:

$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p

Anda juga mungkin perlu memperhatikan nilai-nilai max_queued_events dan max_user_inances jika Listen terus mengeluh.

Sumber: https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify- watchers

Aniket Thakur
sumber
3

Anda dapat memeriksa Batas yang ada dan berdasarkan pada itu Anda dapat mengubahnya sesuai kebutuhan Anda

To Check : cat /proc/sys/fs/inotify/max_user_watches To Alter : sudo sysctl fs.inotify.max_user_watches=524288

Ini akan menyelesaikan kesalahan.

Patel Nikhil
sumber