มีไฟล์ที่เปิดมากเกินไป - วิธีค้นหาผู้ร้าย


69

เมื่อทำงานtail -f filenameฉันได้รับข้อความต่อไปนี้:

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

นั่นเป็นปัญหาที่อาจเกิดขึ้น?

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


1
คุณเพิ่มจำนวนตัวอธิบายไฟล์ที่ใช้ได้ผ่านทางulimitหรือไม่?
Ignacio Vazquez-Abrams

2
@ IgnacioVazquez-Abrams ซึ่งอาจเป็นประโยชน์กับผู้ใช้รายอื่น แต่สำหรับฉันแล้วฉันรู้สึกอยากรักษาอาการมากกว่าการเป็นโรค
แอนดรูกริมม์

ในขณะที่คุณไม่ผิดบางครั้งแอพมีเหตุผลที่ถูกต้องในการเปิดไฟล์หลายไฟล์
Ignacio Vazquez-Abrams

คำตอบ:


72

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

เมื่อคุณเข้าใจว่าใครเป็นคนเลวคุณสามารถ

หากเอาต์พุตจาก lsof มีขนาดใหญ่มากให้ลองเปลี่ยนเส้นทางไปยังไฟล์จากนั้นเปิดไฟล์

ตัวอย่าง (คุณอาจต้องCtrl+ Cคำสั่งแรก)

lsof > ~/Desktop/lsof.log
cat ~/Desktop/lsof.log | awk '{ print $2 " " $1; }' | sort -rn | uniq -c | sort -rn | head -20
vim ~/Desktop/lsof.log

37
สำหรับคนขี้เกียจ:lsof | awk '{ print $2; }' | uniq -c | sort -rn | head
itsadok

1
ฉันได้รับข้อผิดพลาดเดียวกันและการใช้ ulimit ไม่ทำงาน คำสั่ง tail -F ยังคงส่งคืนข้อผิดพลาด ฉันเพิ่มขีด จำกัด จาก 1024 เป็น 3000 ดังนั้นฉันจะจินตนาการว่าฉันมีห้องเพียงพอแล้ว ... ฉันคิดว่าฉันต้องรีบูต!
Alexis Wilke

15
ฉันพบว่าบรรทัดของมันเป็นประโยชน์ แต่ฉันคิดว่าคุณควรเรียงลำดับก่อน (เพราะuniqใช้ได้กับบรรทัดที่อยู่ติดกัน) รัน uniq แล้วเรียงลำดับอีกครั้ง lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | headดังนั้น
Tyler Collier

19
การเรียงลำดับและการนับจำนวนไฟล์ที่เปิดมากที่สุดเป็นสิ่งที่ดีที่สุด แสดงชื่อกระบวนการเช่นเดียวกับ pid: '' 'lsof | awk '{พิมพ์ $ 2 "" $ 1; } '| เรียง -rn | uniq -c | เรียง -rn | หัว -20 '' '
gaoithe

2
@gaoithe ถ้าคุณตอบคำถามนี้ลงไปฉันยินดีจะยกมันขึ้นมา:)
Matt Ball

23

ในกรณีที่คนอื่นต้องการมัน ...

ulimit -a

จะแสดงขีด จำกัด ปัจจุบันทั้งหมด โดยเฉพาะulimit -n 70000จะกำหนดขีด จำกัด ตัวอธิบายไฟล์

นอกจากนี้ยัง ...

cat /proc/sys/fs/file-max

จะแสดง / ตั้งค่าขีด จำกัด เคอร์เนลหากแก้ไข

sudo echo 200000 > /proc/sys/fs/file-max

สามารถดูคำอธิบายโดยละเอียดเพิ่มเติมได้ที่ ...

ฉันจะเพิ่มขีด จำกัด การเปิดไฟล์สำหรับผู้ใช้ที่ไม่ใช่รูทได้อย่างไร?


3
มี ulimits เพื่อให้คุณสามารถควบคุมการใช้ทรัพยากรในระบบของคุณอย่างเข้มงวด วิธีที่ดีที่สุดคือการเพิ่มทีละรายการสำหรับกระบวนการที่คุณรู้ว่าจะต้องใช้ตัวอธิบายไฟล์จำนวนมาก โดยทำให้พวกเขาแน่นในการทดสอบคุณจะพบกระบวนการที่อาจรั่วไฟล์อธิบายตลอดเวลา โปรดทราบว่าการจัดการไฟล์จะใช้สำหรับการเข้าถึงอุปกรณ์ใด ๆ ใน unix / linux เช่นทุกซ็อกเก็ตเครือข่ายที่เปิดโดยกระบวนการใช้ตัวจัดการไฟล์ ซึ่งอธิบายว่าทำไมคุณสามารถกด "เปิดไฟล์มากเกินไป" ในกรณีที่ไฟล์ระบบไฟล์ปกติรวมถึงไฟล์อุปกรณ์ใด ๆ เช่นการเชื่อมต่อเครือข่าย
gaoithe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.