เราเรียกใช้คลัสเตอร์Apache Cassandraที่แต่ละโฮสต์มีไฟล์เปิดสองสามแสนไฟล์ในเวลาใดก็ตาม
เราต้องการที่จะได้รับจำนวนไฟล์ที่เปิดตามช่วงเวลาและป้อนตัวเลขนี้เป็นแกรไฟต์แต่เมื่อเราทำงานlsofภายใต้collectdมันจะใช้เวลาไม่กี่นาทีเพื่อให้เสร็จสมบูรณ์และเคี้ยวซีพียูจำนวนมากในระหว่างนี้ .
ฉันสงสัยว่ามีวิธีอื่นและเป็นมิตรมากกว่านี้ในการรับข้อมูลเดียวกันที่ lsof ให้ไว้หรือแม้กระทั่งวิธีการใช้ lsof ที่จะไม่กินลงใน CPU อย่างเห็นได้ชัดหรือไม่? (แม้ว่าฉันคิดว่าวิธีหลังนี้น่าจะใช้เวลานานกว่าจะเสร็จสมบูรณ์กว่าที่เป็นอยู่ในปัจจุบัน ... ไม่เหมาะ)
บางทีเคอร์เนลรักษาตัวแปรบางแห่งที่มีจำนวนไฟล์ที่เปิดอยู่? คิดอย่างปรารถนา?
ปรับปรุง:
ในการตอบสนองต่อคำตอบอย่างใดอย่างหนึ่งเรากำลังใช้-bและตั้ง-nค่าสถานะแล้ว นี่คือคำสั่งทั้งหมดที่ฉันใช้ภายใต้collectd:
sudo lsof -b -n -w | stdbuf -i0 -o0 -e0 wc -l
/proc/{{number}}/fd/5': No such file or directory find:/ proc / {{number}} / fdinfo / 5 ': ไม่มีไฟล์หรือไดเรกทอรี - Q @ Beno Bent ฉันจะหลีกเลี่ยงสิ่งนั้นได้อย่างไร