เคอร์เนลถึงขีด จำกัด การเฝ้าดูถึง


206

ฉันกำลังประสบปัญหาในกล่อง linux ที่รูตฉันมีคำสั่งที่ส่งคืนข้อผิดพลาดเนื่องจากถึงขีด จำกัด การรับนาฬิกาจนสุดแล้ว

# tail -f /var/log/messages
[...]
tail: cannot watch '/var/log/messages': No space left on device
# inotifywatch -v /var/log/messages
Establishing watches...
Failed to watch /var/log/messages; upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via '/proc/sys/fs/inotify/max_user_watches'.` 

ฉัน googled เล็กน้อยและทุกวิธีที่ฉันพบคือเพิ่มขีด จำกัด ด้วย:

sudo sysctl fs.inotify.max_user_watches=<some random high number>

แต่ฉันไม่สามารถหาข้อมูลเกี่ยวกับผลที่ตามมาจากการเพิ่มมูลค่านั้น ฉันเดาค่าเคอร์เนลเริ่มต้นถูกตั้งค่าด้วยเหตุผล แต่ดูเหมือนว่าจะไม่เพียงพอสำหรับประเพณีโดยเฉพาะ (เช่นเมื่อใช้ Dropbox กับโฟลเดอร์จำนวนมากหรือซอฟต์แวร์ที่ตรวจสอบไฟล์จำนวนมาก)

ดังนั้นนี่คือคำถามของฉัน:

  • การเพิ่มมูลค่านั้นปลอดภัยหรือไม่และจะเกิดอะไรขึ้นกับมูลค่าที่สูงเกินไป
  • มีวิธีการดูว่านาฬิกาที่ตั้งไว้ในปัจจุบันคืออะไรและกระบวนการใดที่ทำให้พวกเขาสามารถระบุได้ว่าข้อ จำกัด การเข้าถึงนั้นไม่ได้เกิดจากซอฟต์แวร์ผิดพลาดหรือไม่?

คุณอาจตรวจสอบสิ่งนี้ได้ในตอนนี้เนื่องจากอายุ 8 เดือน แต่ไดรฟ์ของคุณเต็มหรือไม่ "tail: ไม่สามารถดู '/ var / log / messages': ไม่มีพื้นที่เหลือบนอุปกรณ์"
froggythefrog

คำตอบ:


273

การเพิ่มมูลค่านั้นปลอดภัยหรือไม่และจะเกิดอะไรขึ้นกับมูลค่าที่สูงเกินไป

ใช่มันปลอดภัยที่จะเพิ่มมูลค่าและด้านล่างเป็นค่าใช้จ่ายที่เป็นไปได้ [ แหล่งที่มา ]:

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

วิธีตรวจสอบจำนวนนาฬิกาที่ไม่แจ้งเตือนสูงสุด:

cat /proc/sys/fs/inotify/max_user_watches

ในการตั้งค่าจำนวน inotify นาฬิกาสูงสุด

ชั่วคราว:

  • เรียกใช้sudo sysctl fs.inotify.max_user_watches=ด้วยค่าที่คุณต้องการในตอนท้าย

อย่างถาวร ( ข้อมูลรายละเอียดเพิ่มเติม ):

  • ใส่fs.inotify.max_user_watches=524288ลงในการตั้งค่า sysctl ของคุณ ขึ้นอยู่กับระบบของคุณซึ่งอาจอยู่ในสถานที่ต่อไปนี้:
    • Debian / RedHat: /etc/sysctl.conf
    • Arch: ใส่ไฟล์ใหม่เข้าไป/etc/sysctl.d/เช่น/etc/sysctl.d/40-max-user-watches.conf
  • คุณอาจต้องการโหลดการตั้งค่า sysctl อีกครั้งเพื่อหลีกเลี่ยงการรีบูต: sysctl -p(Debian / RedHat) หรือsysctl --system(Arch)

ตรวจสอบเพื่อดูว่ามีนาฬิกาถึงจำนวนสูงสุดของการแจ้งเตือนไม่ครบ:

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

tail: ไม่สามารถดู '/ var / log / dmsg': ไม่มีพื้นที่เหลือบนอุปกรณ์

หากต้องการดูว่ามีอะไรที่ทำให้นาฬิกาไม่เข้าที่

find /proc/*/fd -lname anon_inode:inotify |
   cut -d/ -f3 |
   xargs -I '{}' -- ps --no-headers -o '%p %U %c' -p '{}' |
   uniq -c |
   sort -nr

คอลัมน์แรกระบุจำนวน inotify fds (ไม่ใช่จำนวนนาฬิกา) และคอลัมน์ที่สองแสดง PID ของกระบวนการนั้น [แหล่งที่มา: 1 , 2 ]


3
I guess very few codes need the values higher than the defaultDropbox อาจต้องการขีด จำกัด ที่สูงกว่าขึ้นอยู่กับจำนวนไฟล์ที่คุณมี Iv'e เลี้ยงดูฉันโดยไม่มีปัญหา อันที่จริงแล้วการแจ้งเตือนดรอปบ็อกซ์ (ที่เกิดขึ้นเมื่อถึงขีด จำกัด ) แจ้งให้คุณทราบอย่างชัดเจน
Falmarri

1
@ ultrasawblade- inotify แทนที่ dnotify dnotify ช้าและบั๊กกี้ inotify สามารถใช้กับไดเร็กทอรีและไดเร็กทอรีจะ "เปลี่ยนแปลง" เมื่อหนึ่งในไฟล์ในไดเร็กทอรีนั้น (ลึกหนึ่งระดับ) ถูกแก้ไข ไดเรกทอรีเป็นเพียงไฟล์อยู่แล้ว
beatgammit

6
"อย่างถาวร: แทนที่ค่าภายใน / proc / sys / fs / inotify / max_user_watches" <- สิ่งนี้ไม่ถูกต้อง เพื่อให้ถาวรนี้คุณต้องเปลี่ยน/etc/sysctl.conf
Merc

3
sysctl! = systemd ในคำอธิบายของคุณ และ/etc/sysctl.dยังทำงานบนระบบที่ใช้ RedHat รุ่นใหม่
aairey

1
@stackexchanger หากคุณแน่ใจว่าสิ่งเหล่านี้คล้ายกัน (เช่นคุณทดสอบแล้ว) โปรดส่งและแก้ไขคำถาม ฉันยังไม่ได้ตรวจสอบตัวเองและฉันรู้ว่า distros มีแนวโน้มที่จะแพทช์แพ็คเกจดังนั้นพฤติกรรมอาจแตกต่างกันสำหรับแพ็คเกจเดียวกัน นี่ไม่ได้พูดถึงความแตกต่างในเวอร์ชั่นแพ็คเกจด้วย
tshepang
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.