ทำไม file-nr และ lsof ถึงมีความแตกต่างกัน? [ปิด]


19

ฉันกำลังเจอปัญหาทันทีทันใด; แอปพลิเคชันทั้งหมดและเซิร์ฟเวอร์ของฉันทำงานได้ดีและในทันใดฉันเห็นจำนวนไฟล์ที่เปิดค้าง

ฉันกำลังตรวจสอบมันด้วยคำสั่งนี้:

cat /proc/sys/fs/file-nr

เมื่อฉันตรวจสอบสิ่งนี้มันจะแสดง44544 0 128000ดังนั้น 44544 คือจำนวนไฟล์ที่เปิด

แต่เมื่อฉันตรวจสอบด้วยคำสั่งนี้ - lsof | wc -l มันแสดง - 28384

แล้วอันไหนที่ถูกต้อง?

ขีด จำกัด สูงสุดสำหรับการเปิดไฟล์ของฉันคือ 65535

ulimit -a
open files                      (-n) 65535

ฉันต้องการทราบกระบวนการ 5 อันดับแรกที่ใช้ไฟล์ที่เปิดมากขึ้น ฉันสามารถรับได้จากนี้lsofแต่จำนวนที่แสดงที่นี่แตกต่างจากคำสั่งอื่น ๆ ที่ฉันได้กล่าวไว้ข้างต้น

ฉันสามารถรับรายละเอียดของกระบวนการที่นับได้ด้วยคำสั่งนี้cat /proc/sys/fs/file-nrหรือไม่?

ตามลิงค์ที่ระบุไว้ด้านล่างมันบอกว่าเราไม่สามารถ วิธีการแสดงตัวอธิบายไฟล์ที่เปิด แต่ไม่ได้ใช้คำสั่ง lsof

มีงานให้ฉันบ้างไหม? ฉันต้องการค้นหาว่ากระบวนการใดที่เริ่มต้นใช้ไฟล์ที่เปิดมากขึ้นในทันที

อัปเดต ขออภัยพวกสำหรับปัญหา ฉันพบข้อผิดพลาดที่ฉันทำฉันไม่ได้ตรวจสอบ lsof | wc -l จากรูท นั่นคือเหตุผลที่ฉันเห็นความแตกต่างอย่างมาก

ยังคงมีความแตกต่างระหว่างการส่งออกของไฟล์ -nr และ lsof | wc -l (จากรูท) lsof count เป็นมากกว่าไฟล์ -nr count เหตุผลของเรื่องนี้คือไฟล์ -nr ไม่สนใจไดเรกทอรีบางอัน (ซึ่งถือว่าเป็นไฟล์โดย lsof) ฉันพบเหตุผลนี้โดยการวิจัย litle บน google ของตัวเอง อย่างไรก็ตาม! ขอบคุณมากสำหรับความช่วยเหลือ!


ที่เกี่ยวข้อง: serverfault.com/questions/485262/…
Barmar

คือlsof | wc -l จริงๆแสดงจำนวนลบหรือไม่?
โจเซเวล

3
นั่นไม่ใช่เครื่องหมายลบเครื่องหมายยัติภังค์!
Vasanth Nag KV

คำตอบ:


8

ดูเหมือนจะมีสองคำถามในการเล่นที่นี่ ก่อนอื่นเอกสารเต็มของโครงสร้าง file-nr และ file-max สามารถดูได้ที่

https://www.kernel.org/doc/Documentation/sysctl/fs.txt

สิ่งนี้กำหนดฟิลด์ในไฟล์นั้นเป็น:

ค่าสามค่าใน file-nr แสดงถึงจำนวนของการจัดการไฟล์ที่จัดสรรจำนวนการจัดการไฟล์ที่ถูกจัดสรร แต่ไม่ได้ใช้งานการจัดการไฟล์และจำนวนสูงสุดของการจัดการไฟล์ Linux 2.6 รายงาน 0 เสมอว่าจำนวนการจัดการไฟล์ว่าง - นี่ไม่ใช่ข้อผิดพลาดหมายความว่าจำนวนการจัดการไฟล์ที่จัดสรรตรงกับจำนวนไฟล์ที่ใช้

หวังว่าจะชัดเจนเพียงพอ คำถามที่สองได้รับคำตอบในกระทู้ที่กล่าวถึงข้างต้น ( /server/485262/number-of-file-descriptors-different-between-proc-sys-fs-file-nr-and-proc- pi ) และดูเหมือนจะตกไปเป็นใดก็ได้

  1. "ใช้ lsof" และกรองเอาท์พุทอย่างเหมาะสมหากคุณต้องการได้รับการประมาณที่ดีของตัวอธิบายไฟล์ที่ใช้โดยกระบวนการหรือ
  2. ข้ามผ่านระบบไฟล์ / proc (และยังต้องกรองเอาต์พุต) เพื่อรับสแน็ปช็อตในเวลาที่ไฟล์ descriptor ใช้

ความยากลำบากในการได้รับตัวชี้วัดที่แม่นยำสำหรับเรื่องนี้มีความสำคัญเนื่องจากจำนวน FD ที่ใช้งาน ณ จุดใดก็ตามสามารถเปลี่ยนแปลงอย่างรวดเร็วในระบบ

เธรดต่อไปนี้แนะนำรูปแบบการกรองสำหรับวิธีการ 'lsof':

/server/396872/why-or-how-does-the-number-of-open-file-descriptors-in-use-by-root-exceed-ulim


อัปเดตคำถามของฉัน แต่ขอบคุณสำหรับข้อมูลทั้งหมดที่นั่น
Vasanth Nag KV

แต่เป็นไปได้ยังไงกว่าที่ulimitฉันบอกว่าฉันสามารถเปิดไฟล์ได้มากถึง 1024 ไฟล์ถ้าlsof | wc -lบอกว่าฉันมี 1545 อยู่แล้ว?
Nakilon

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