tail: inotify ไม่สามารถใช้งาน, ย้อนกลับไปยังการสำรวจ: มีไฟล์ที่เปิดอยู่มากเกินไป


16

เมื่อฉันพยายามtail -f catalina.outฉันได้รับข้อผิดพลาด:

tail: inotify cannot be used, reverting to polling: Too many open files 

ฉันลองคำตอบในโพสต์นี้: มีไฟล์ที่เปิดมากเกินไป - วิธีค้นหาผู้ร้าย

lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head

เมื่อฉันรันคำสั่งข้างต้นผลลัพธ์คือ

17 6115

13 6413

10 6417

10 6415

9 6418

9 6416

9 6414

8 6419

4 9 

4 8

ฉันไม่เห็นกระบวนการใด ๆ ที่เปิด 1024 ไฟล์ จำนวนไฟล์ไม่เปิด 17,13,10,10,9 ใช่ไหม หรือฉันเข้าใจผิด และทั้งหมดนี้คือทุบตี, sshd, apache2, tomcat มีหมายเลข 4

ฉันยังไม่ได้ทำซึ่งกลับlsof | grep tail | wc -l 20ตัวเลขเหล่านี้ไม่ใหญ่นักทำไมจึงtail -f catalina.outล้มเหลว

คำตอบ:


17

นี้ได้รับการแก้ไขได้สำหรับฉันโดยทำตามคำแนะนำบนhttp://peter-butkovic.blogspot.com/2013/08/tail-inotify-resources-exhausted.html

โซลูชันถาวร (รักษาไว้ตลอดการรีสตาร์ท) การเพิ่มบรรทัด:

fs.inotify.max_user_watches=1048576

ถึง:

/etc/sysctl.conf

แก้ไขค่า จำกัด อย่างถาวร (แม้ระหว่างการรีสตาร์ท)

จากนั้นทำ

sysctl -p

1
การเพิ่มตัวอธิบายไฟล์ไม่ช่วยฉัน ฉันข้อความที่แตกต่างกันเล็กน้อยtail tail: inotify resources exhaustedคำตอบนี้ช่วยฉัน คุณสามารถใช้sudo sysctl -w fs.inotify.max_user_watches=1048576 && sysctl -pเพื่อทดสอบว่าช่วยได้หรือไม่โดยไม่ต้องแก้ไขอย่างถาวร โพสต์นี้ยังช่วย nefaria.com/2014/08/tail-inotify-resources-exampleed
Ruslan Stelmachenko

9

ฉันคิดว่าคำตอบนั้นไม่สมบูรณ์ (ไม่ได้บอกอะไรเลยเกี่ยวกับขีด จำกัด สูงสุดของไฟล์ที่เปิดอยู่ในระบบ)

มีข้อ จำกัด สองประการเกี่ยวกับจำนวนไฟล์ที่เปิดสูงสุด:

  1. ขีด จำกัด สูงสุดของไฟล์ที่เปิดต่อกระบวนการ

    • คุณสามารถดูได้ว่าค่าใดของขีด จำกัด นี้โดยใช้: ulimit -n
    • คุณสามารถเปลี่ยนข้อ จำกัด นี้โดยใช้: ulimit -n new_limit_number
    • นี่คือคำสั่งเพื่อรับกระบวนการ 10 อันดับแรกที่เปิดไฟล์จำนวนมาก:

      lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head
  2. ขีด จำกัด สูงสุดของไฟล์ที่เปิดต่อระบบ

    • คุณสามารถดูได้ว่าค่าใดของขีด จำกัด นี้โดยใช้: cat /proc/sys/fs/file-max
    • คุณสามารถเปลี่ยนข้อ จำกัด นี้โดยใช้: echo new_limit_number > /proc/sys/fs/file-max
    • นับการจัดการไฟล์ที่เปิดอยู่ทั้งหมด: lsof | wc -l

6

เป็นไปได้มากว่าคุณหมดแล้ว inotifyนาฬิกาแล้ว อาจเป็นเพราะคุณใช้เครื่องมือซิงโครไนซ์ไฟล์ (เช่น Dropbox) ในพื้นหลัง?

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

แน่นอนคุณสามารถปรับเปลี่ยนจำนวนinotifyนาฬิกาสูงสุดได้

การอ้างอิง:
http://www.quora.com/How-is-tail-f-implemented
http://peter-butkovic.blogspot.com/2013/08/tail-inotify-resources-exorexed.html
https: // serverfault.com/questions/510708/tail-inotify-cannot-be-used-reverting-to-polling-too-many-open-files


3

sysctl fs.inotify.max_user_instancesinotifyจะได้รับวงเงินต่อผู้ใช้

ผมมีประสบการณ์มันและระบบวงเงินทั้งหมดกว้างก็เพียงพอที่สูง แต่การตั้งค่าโดยผู้ใช้มักจะค่อนข้างต่ำโดยเริ่มต้นที่คุณสามารถเพิ่มในและโหลดมันเล็กน้อยsysctl.confsysctl -p


3

วิ่ง

ps aux | grep tail

เพื่อตรวจสอบว่าคำสั่ง tail มากเกินไปทำงานหรือไม่เช่นวางไข่โดย crontab


ฮ่านี้ใช้งานได้จริง, ปรับไฟล์มากเกินไป
Alexander Mills

ฉันจะแปลข้อมูลได้อย่างไร คุณช่วยอธิบายว่าข้อมูลแต่ละชิ้นมีความหมายอย่างไรและจะทำอย่างไรกับมัน? ตัวอย่างเช่น:root 20161 0.0 0.0 11132 1044 pts/0 S+ 17:27 0:00 grep tail
Christia

มันเป็นปัญหาเฉพาะในกรณีที่กระบวนการมากเกินไปจับคู่สายที่จับคู่มี "grep" ถูกสร้างขึ้นโดยคำสั่งเอง โปรดใช้คำสั่ง "pgrep tail" แทน
tangxinfa

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