มีการ จำกัด จำนวนผู้ใช้นาฬิกาที่ไม่เปิดเผยบน Ubuntu 16.04


43

ฉันเพิ่งติดตั้ง Ubuntu 16.04 และฉันได้รับคำเตือนนี้เมื่อฉันเริ่มSmartGit :

IOException: User limit of inotify watches reached

นอกจากนี้ฉันยังได้รับการเตือนการเปิดตัวนี้tail -f:

tail: inotify resources exhausted 

tail: inotify cannot be used, reverting to polling

ฉันไม่เคยได้รับข้อผิดพลาดนี้กับ Ubuntu 14.04 และแอปพลิเคชันและไฟล์ที่ฉันใช้บน Ubuntu ใหม่ค่อนข้างเหมือนกับที่ฉันใช้ในรุ่นก่อนหน้า

ข้อแตกต่างที่เกี่ยวข้องเพียงอย่างเดียวคือฉันเพิ่มฮาร์ดดิสก์เพิ่มเติมบนพีซีและฉันกำหนดค่าเครื่องมือสำรองข้อมูลของ Ubuntu ปัญหานี้เกี่ยวข้องกับดิสก์แผ่นที่สองหรือใช้เครื่องมือสำรองข้อมูลได้หรือไม่?


คำตอบ:


76

ค่าเริ่มต้นปัจจุบันบน Xenial คือ 8192 (ดู fs / แจ้งเตือน / inotify / inotify_user.c ในแหล่งเคอร์เนล) คุณสามารถตรวจสอบได้โดยการพิมพ์ไฟล์ไปยัง stdout:

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

ตัวอย่างเช่นคุณสามารถเพิ่มจำนวนขึ้นเป็นสองเท่าเป็น 16384 โดยใช้:

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

จำไว้ว่านาฬิกา inotify ใช้หน่วยความจำฉันคิดว่ามันประมาณ 160 ไบต์ต่อนาฬิกาบนระบบ 64 บิต

หากต้องการตั้งค่านี้อย่างถาวรให้เพิ่มรายการใน /etc/sysctl.conf ตัวอย่างเช่น:

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

.. หรือแก้ไขด้วยตนเอง/etc/sysctl.conf(คุณต้องการสิทธิ์รูทเพื่ออัปเดต) จากนั้นเรียกใช้sudo sysctl -p


ใช่ขอบคุณ. ฉันเพิ่มเป็นสองเท่าและตอนนี้ฉันไม่มีคำเตือนอีกต่อไป หน่วยความจำ (สูงสุด) จะถูกใช้สำหรับนาฬิกา 16.384 เท่าใด คำนวณของฉันให้ฉันมากหรือน้อย2.5MB ถูกต้องหรือไม่
Andrea

บางสิ่งในลำดับนั้นบวกค่าใช้จ่าย มันไม่ใหญ่เกินไปในแผนการที่ยิ่งใหญ่ของสิ่งของ
โคลินเอียนคิง

นี่คือข้อมูลเพิ่มเติมบางส่วนเกี่ยวกับการใช้หน่วยความจำที่เป็นไปได้ของนาฬิกา (ใช้แล้ว) askubuntu.com/questions/154255//
michael

11

คำตอบข้างต้นใช้งานได้ดี แต่มันไม่ได้อธิบายว่าทำไมฉันถึงมองไปรอบ ๆ เพื่อหาคำตอบที่สมบูรณ์ -

ทำไม?

โปรแกรมที่ซิงค์ไฟล์เช่นดรอปบ็อกซ์ git ฯลฯ ใช้ inotify เพื่อแจ้งให้ทราบการเปลี่ยนแปลงของระบบไฟล์ ขีด จำกัด สามารถดูได้โดย -

cat /proc/sys/fs/inotify/max_user_watches

สำหรับผมมันแสดงให้เห็นถึง100000 เมื่อข้อ จำกัด นี้ไม่เพียงพอที่จะตรวจสอบไฟล์ทั้งหมดภายในไดเรกทอรีมันจะพ่นข้อผิดพลาดนี้


การเพิ่มจำนวน inotify watchers (เวอร์ชั่นสั้น):

หากคุณใช้Debian, RedHat หรือการกระจาย Linux อื่น ๆ ที่คล้ายกันให้รันสิ่งต่อไปนี้ในเทอร์มินัล:

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

หากคุณใช้งานArchLinuxให้เรียกใช้คำสั่งต่อไปนี้แทน (ดูที่นี่เพื่อเหตุผล):

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

จากนั้นวางลงในเครื่องเทอร์มินัลของคุณและกดบนเพื่อเรียกใช้


รายละเอียดทางเทคนิค:

Listen ใช้ inotify โดยค่าเริ่มต้นบน Linux เพื่อตรวจสอบไดเรกทอรีสำหรับการเปลี่ยนแปลง ไม่ใช่เรื่องแปลกที่จะพบข้อ จำกัด ของระบบกับจำนวนไฟล์ที่คุณสามารถตรวจสอบได้ ตัวอย่างเช่นขีด จำกัด inotify ของ Ubuntu Lucid (64 บิต) ถูกตั้งค่าเป็น 8192

คุณสามารถรับข้อ จำกัด การเฝ้าดูไฟล์ inotify ปัจจุบันของคุณโดยการดำเนินการ:

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

เมื่อขีด จำกัด นี้ไม่เพียงพอที่จะตรวจสอบไฟล์ทั้งหมดภายในไดเรกทอรีต้องเพิ่มขีด จำกัด เพื่อให้ Listen ทำงานได้อย่างถูกต้อง

คุณสามารถกำหนดขีด จำกัด ใหม่ชั่วคราวด้วย:

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

หากคุณต้องการ จำกัด วงเงินถาวรให้ใช้:

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

คุณอาจต้องใส่ใจกับค่าของ max_queued_events และ max_user_instances หากฟังต่อไปเรื่อย ๆ

ที่มา: https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers


3

คุณสามารถตรวจสอบวงเงินที่มีอยู่และขึ้นอยู่กับว่าคุณสามารถแก้ไขได้ตามความต้องการของคุณ

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

สิ่งนี้จะแก้ไขข้อผิดพลาด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.