हम एक अपाचे कैसंड्रा क्लस्टर चलाते हैं जहां प्रत्येक होस्ट में किसी भी समय कुछ सौ हज़ार फाइलें खुली होती हैं।
हम आवधिक अंतरालों पर खुली फाइलों की एक गिनती प्राप्त करने और इस संख्या को ग्रेफाइट में फीड करने में सक्षम होना चाहते हैं , लेकिन जब हम 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 Qt मैं इससे कैसे बच सकता हूं?