ฉันจะรู้ได้อย่างไรว่าฉันไม่ได้ระบุนาฬิกา


47

ฉันใช้แอพพลิเคชั่นที่ใช้นาฬิกาที่ไม่มีการระบุ ฉันได้ตั้งค่าไว้แล้ว

fs.inotify.max_user_watches=32768

ใน/etc/sysctl.confเมื่อคืนที่ผ่านมาแอปพลิเคชันหยุดการจัดทำดัชนีเว้นแต่ว่าฉันจะรันด้วยตนเองซึ่งทำให้ฉันสงสัยว่าฉันไม่ได้ดู

เนื่องจากฉันไม่ทราบว่าการแลกเปลี่ยนคืออะไรเมื่อฉันเพิ่มจำนวนนี้ (ใช้ RAM มากกว่านี้หรือไม่) ฉันไม่รู้ว่าฉันควรเพิ่มจำนวนนี้หรือไม่ดังนั้นฉันต้องการทราบว่ามีวิธีที่ฉันหรือไม่ สามารถบอกได้ว่าใช้นาฬิกาเหล่านี้ทั้งหมดหรือไม่


คำถามนี้ค่อนข้างมีความเกี่ยวข้องอีกครั้งเนื่องจากปรากฎใน 18.04 การปลดล็อกหน้าจอเป็นไปไม่ได้หากมีนาฬิกา inode หมด
kasperd

คำตอบ:


64

คุณจะรู้ได้อย่างไรว่าคุณไม่อยู่กับนาฬิกา? หางจะบอก!

  • เริ่มtailด้วย-fตัวเลือก (ตาม) ในไฟล์เก่าเช่นtail -f /var/log/dmesg:
    • หากทุกอย่างดีก็จะแสดง 10 บรรทัดสุดท้ายและหยุดชั่วคราว ยกเลิกด้วย Ctrl-C
    • หากคุณไม่อยู่กับนาฬิกามันจะล้มเหลวโดยมีข้อผิดพลาดที่ค่อนข้างคลุมเครือนี้:
      tail: ไม่สามารถดู '/ var / log / dmsg': ไม่มีพื้นที่เหลือบนอุปกรณ์

สำหรับความอยากรู้อยากเห็น: ทำไมหาง "หาง"

  • ที่จริงใด ๆ แอปที่เขียนดีควรจะมีมารยาทของบอกคุณตั้งแต่inotify API / เรียกอย่างชัดเจนบอกพวกเขาสิ่งที่จัดการคือ
  • ลองstrace tail -f ...แทนและเมื่อสำเร็จก็จะสิ้นสุดลงด้วย:
    inotify_add_watch (4, "/ var / log / dmesg", IN_MODIFY ... ) = 1
    
  • แต่ถ้ามันล้มเหลวนั่นคือคุณออกจากนาฬิกามันจะพูดว่า:
    inotify_add_watch (4, "/ var / log / dmesg", IN_MODIFY .. )
     = -1 ENOSPC (ไม่มีพื้นที่เหลือบนอุปกรณ์)
    

คุณสามารถเพิ่มนาฬิกาได้ไหม? เท่าไหร่ การแลกเปลี่ยนใด ๆ

คำตอบสั้น ๆ :แน่นอนว่าไม่มีเหงื่อ ไปที่ครึ่งล้าน (524288) หากคุณต้องการ ... หน่วยความจำเพิ่มเติมที่ใช้ควรจะไม่สำคัญในระบบที่ทันสมัยพร้อมหน่วยความจำ 4GB +

  • นาฬิกา inotify แต่ละอันที่ใช้จะใช้เวลา 540 ไบต์ (ระบบ 32 บิต) หรือ 1 kB (สองครั้งบน 64 บิต) [แหล่งที่มา: 1 , 2 ]
  • นี่มาจากหน่วยความจำเคอร์เนลซึ่งไม่สามารถเปิดใช้งานได้
  • ดังนั้นสมมติว่าคุณตั้งค่าสูงสุดไว้ที่ 524288 และทั้งหมดถูกใช้ (ไม่น่าจะเป็นไปได้) คุณจะใช้ค่าประมาณ หน่วยความจำเคอร์เนล 32- บิต / 64- บิต 256MB / 512MB

    • โปรดทราบว่าแอปพลิเคชันของคุณจะใช้หน่วยความจำเพิ่มเติมเพื่อติดตามตัวจัดการ inotify พา ธ ไฟล์ / ไดเรกทอรี ฯลฯ - ขึ้นอยู่กับการออกแบบ
  • ค่าสูงสุดคืออะไร ในทางทฤษฎีฉันเดาว่าไม่มีตราบใดที่คุณมี RAM เพียงพอ ในทางปฏิบัติแล้ว 524288 ได้รับการแนะนำอย่างเป็นทางการจากแอพและผู้คนตั้งค่าไว้ที่2 ล้านด้วยการใช้หน่วยความจำที่มาพร้อมกันแน่นอน


5
หากคุณต้องการทราบจำนวน inotify นาฬิกาปัจจุบันจริง ๆ (เช่นนั้นใช่ / ไม่ใช่) ไปที่sudo lsof | grep -i inotify | wc -l
Frank Nocke

2
ลิงก์ "well-ลายลักษณ์อักษร - แอพ" เสียหาย
Gaurav Sharma

11

ฉันไม่รู้ว่าควรเพิ่มจำนวนนี้หรือไม่

วิธีที่ง่ายในการตรวจสอบว่าmax_user_watchesมูลค่าของคุณคือการใช้inotifywatchจากแพ็คเกจinotify-toolsและตรวจสอบว่าคุณยังสามารถรวบรวมข้อมูลจากไฟล์ได้หรือไม่

ตัวอย่างเช่นinotifywatch -v /home/bruno/.profileสำหรับฉันส่งคืน:

Establishing watches...
Total of 1 watches.
Finished establishing watches, now collecting statistics.

ดังนั้นจึงinotifyไม่มีปัญหาในการสร้างนาฬิกาใหม่ไม่มีปัญหาที่นี่

หากคุณมีการใช้งานนาฬิกาจนเกินขีด จำกัด สูงสุดแล้วระบบจะส่งคืนสิ่งที่ต้องการ

Failed to watch /home/bruno/.profile; upper limit on inotify watches reached!

หากคุณเห็นบางสิ่งเช่นนี้แสดงว่าคุณถึงขีด จำกัด แล้วและจะต้องเพิ่มจำนวนนาฬิกาที่อนุญาต

มันกินแรมมากกว่าหรือไม่

ใช่แล้ว. แต่ตามบทความเก่านี้ปริมาณการใช้น้อยที่สุดเมื่อเทียบกับด้านอื่น ๆ ของเดสก์ทอปที่ใช้งานอยู่

--การใช้ความจำ--

โครงสร้างข้อมูลที่ไม่มีการแบ่งส่วนมีน้ำหนักเบา:

inotify watch คือ 40 ไบต์อุปกรณ์ inotify คือ 68 ไบต์เหตุการณ์ inotify คือ 272 ไบต์

ดังนั้นถ้าอุปกรณ์มีนาฬิกา 8192 ตัวโครงสร้างจะใช้หน่วยความจำ 320KB เท่านั้น ด้วยจำนวนสูงสุด 8 อุปกรณ์ที่อนุญาตให้มีอยู่ในแต่ละครั้งจึงยังคงเป็นเพียง 2.5 MB

อุปกรณ์แต่ละเครื่องยังสามารถมีกิจกรรมเข้าคิวได้ 256 เหตุการณ์ในแต่ละครั้งซึ่งรวมถึง 68KB ต่ออุปกรณ์ และเพียง. 5 MB หากอุปกรณ์ทั้งหมดเปิดและมีคิวเหตุการณ์เต็ม

ดังนั้นหน่วยความจำประมาณ 3 MB จะถูกใช้ในกรณีที่หายากของทุกสิ่งที่เปิดและเต็ม

นาฬิกา inotify แต่ละตัวจะยึด inode ของไดเรคทอรี / ไฟล์ในหน่วยความจำขนาดของ inode นั้นแตกต่างกันไปตามระบบไฟล์ แต่สมมติว่ามันมีขนาด 512 ไบต์

ดังนั้นสมมติว่าจำนวนนาฬิกาทั่วโลกมีการใช้งานสูงสุดสิ่งนี้จะลดขนาด inodes ลง 32 MB ในแคชของ inode อีกครั้งไม่เป็นปัญหาในระบบที่ทันสมัย

ฉันแน่นอนว่าสิ่งต่าง ๆ ไม่เปลี่ยนแปลงมากนักเนื่องจากบทความเขียนขึ้น แต่การดูตัวเลขที่ฉันไม่ต้องกังวลและการเพิ่มขีด จำกัด จะไม่เพิ่มปริมาณการใช้ RAM มากขึ้น


โพสต์ที่เกี่ยวข้องเกี่ยวกับ inotify


คนที่ขอโทษฉันเปิดร่างเมื่อวานนี้เป็นเวลาสองสามชั่วโมงและไม่เห็นคำตอบของคุณก่อนที่ฉันจะโพสต์ของฉัน ฉันเดาว่ามันโอเคเพราะพวกเขามีสองวิธีที่แตกต่างกัน :-) คุณช่วยอธิบายได้ไหมว่าในเมล็ดที่ผ่านมา inotify ใช้ 0.5KB (32 บิต) หรือ 1KB (64- บิต) ของหน่วยความจำเคอร์เนลต่อนาฬิกาตั้งแต่ข้อมูลเก่าจาก ดูเหมือนจะไม่เป็นจริงอีกต่อไปในปี 2005?
ish
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.