เราเรียกใช้คลัสเตอร์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 ฉันจะหลีกเลี่ยงสิ่งนั้นได้อย่างไร