Giới hạn người dùng của đồng hồ inotify đạt được trên Ubuntu 16.04


43

Tôi mới cài đặt Ubuntu 16.04 và tôi nhận được cảnh báo này khi khởi động SmartGit :

IOException: User limit of inotify watches reached

Hơn nữa, tôi nhận được cảnh báo này tail -f:

tail: inotify resources exhausted 

tail: inotify cannot be used, reverting to polling

Tôi không bao giờ gặp lỗi này với Ubuntu 14.04 và các ứng dụng và tệp tôi đang sử dụng trên Ubuntu mới hoàn toàn giống với phiên bản trước.

Sự khác biệt duy nhất có liên quan là tôi đã thêm một Đĩa cứng bổ sung trên PC và tôi đã cấu hình công cụ sao lưu của Ubuntu. Vấn đề này có thể liên quan đến đĩa thứ hai hoặc với công cụ sao lưu không?


Câu trả lời:


76

Mặc định hiện tại trên Xenial là 8192 (xem fs / notify / inotify / inotify_user.c trong nguồn kernel), bạn có thể xác minh điều này bằng cách in tệp ra thiết bị xuất chuẩn:

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

Bạn có thể tăng số lượng lên, ví dụ, nhân đôi số này lên 16384, bằng cách sử dụng:

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

Hãy nhớ rằng đồng hồ inotify tiêu thụ bộ nhớ, tôi nghĩ rằng nó khoảng 160 byte cho mỗi đồng hồ trên các hệ thống 64 bit.

Để đặt mục này vĩnh viễn, hãy thêm một mục vào /etc/sysctl.conf, ví dụ:

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

.. hoặc chỉnh sửa thủ công /etc/sysctl.conf(bạn cần quyền root để cập nhật nó) và sau đó chạysudo sysctl -p


Vâng, cảm ơn. Tôi đã nhân đôi nó và bây giờ tôi không còn cảnh báo nữa. Bao nhiêu bộ nhớ (tối đa) sẽ được tiêu thụ cho 16.384 đồng hồ? Tính toán của tôi cho tôi nhiều hơn hoặc ít hơn 2,5 MB . Đúng không?
Andrea

Một cái gì đó theo thứ tự đó, cộng với một số chi phí; nó không quá lớn trong sơ đồ lớn của sự vật.s
Colin Ian King

đây là một số thông tin thêm về tiêu thụ bộ nhớ có thể xảy ra (sử dụng) đồng hồ askubuntu.com/questions/154255/...
michael

11

Các câu trả lời trên hoạt động rất tốt nhưng nó không giải thích lý do tại sao tôi đang tìm kiếm ở đây để cố gắng trả lời hoàn chỉnh -

Tại sao?

Các chương trình đồng bộ hóa các tệp như dropbox, git, vv sử dụng inotify để thông báo các thay đổi cho hệ thống tệp. Giới hạn có thể được nhìn thấy bởi -

cat /proc/sys/fs/inotify/max_user_watches

Đối với tôi, nó hiển thị 100000 . Khi giới hạn này không đủ để giám sát tất cả các tệp trong một thư mục, nó sẽ đưa ra lỗi này.


Tăng số lượng người theo dõi inotify (Phiên bản ngắn):

Nếu bạn đang chạy Debian, RedHat hoặc một bản phân phối Linux tương tự khác , hãy chạy phần sau trong một thiết bị đầu cuối:

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

Nếu bạn đang chạy ArchLinux , thay vào đó hãy chạy lệnh sau (xem tại đây để biết lý do):

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

Sau đó dán nó vào thiết bị đầu cuối của bạn và nhấn enter để chạy nó.


Chi tiết kỹ thuật:

Nghe sử dụng inotify theo mặc định trên Linux để theo dõi các thư mục thay đổi. Không có gì lạ khi gặp phải giới hạn hệ thống về số lượng tệp bạn có thể theo dõi. Ví dụ: giới hạn inotify của Ubuntu Lucid (64 bit) được đặt thành 8192.

Bạn có thể nhận giới hạn xem tập tin inotify hiện tại của mình bằng cách thực hiện:

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

Khi giới hạn này không đủ để giám sát tất cả các tệp trong một thư mục, giới hạn phải được tăng lên để Nghe hoạt động bình thường.

Bạn có thể đặt giới hạn mới tạm thời bằng:

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

Nếu bạn muốn làm cho giới hạn của mình vĩnh viễn, hãy sử dụng:

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

Bạn cũng có thể cần chú ý đến các giá trị của max_queued_events và max_user_instances nếu Lắng nghe tiếp tục phàn nàn.

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


3

Bạn có thể kiểm tra Giới hạn hiện có và dựa vào đó bạn có thể thay đổi Giới hạn theo yêu cầu của mình

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

Điều này sẽ giải quyết lỗi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.