में प्रति प्रक्रिया प्रोग्रामेटिक संसाधन निगरानी, मैं जानना चाहता हूं कि लिनक्स में प्रक्रिया संसाधन खपत (सीपीयू, मेमोरी, नेटवर्क बैंडविड्थ) की निगरानी करने के लिए कोई कुशल समाधान है या नहीं। मैं सी ++ में एक डिमन लिखना चाहता हूं जो कुछ दिए गए पीआईडी के लिए यह निगरानी करता है। जो मुझे पता है, क्लासिक समाधान समय-समय पर जानकारी को/proc से पढ़ना है, लेकिन यह सबसे प्रभावी तरीका प्रतीत नहीं होता है (इसमें कई सिस्टम कॉल शामिल हैं)। उदाहरण के लिए 50 प्रक्रियाओं के लिए हर सेकेंड मेमोरी उपयोग की निगरानी करने के लिए, मुझे 50 फाइलों को खोलना, पढ़ना और बंद करना है (जिसका अर्थ है 150 सिस्टम कॉल) प्रत्येक सेकेंड/proc से। इन फ़ाइलों को पढ़ने के दौरान शामिल पार्सिंग का जिक्र नहीं करना चाहिए।लिनक्स
नेटवर्क बैंडविड्थ खपत एक और समस्या है: इसे प्रत्येक प्रक्रिया के लिए आसानी से गणना नहीं की जा सकती है जिसे मैं मॉनीटर करना चाहता हूं। नेटहोग्स द्वारा अपनाए गए समाधान में मेरी राय में एक बहुत ऊंचा ओवरहेड शामिल है: यह libpcap का उपयोग करके प्रत्येक पैकेट को कैप्चर और विश्लेषण करता है, फिर प्रत्येक पैकेट के लिए स्थानीय पोर्ट निर्धारित होता है और इसी प्रक्रिया को खोजने के लिए/proc में खोजा जाता है।
क्या आप जानते हैं कि इन विधियों के लिए अधिक कुशल विकल्प हैं या इस समस्या से निपटने वाले किसी भी पुस्तकालय?
टास्कस्टैट में केवल डिस्क I/O है, नेट और डिस्क दोनों नहीं – tuxx
सुधार: टास्कस्टैट केवल पढ़ने/लिखने के सिस्कोल पर नज़र रखता है, और recv/send और friends नहीं (लेकिन यह कर्नेल के अंदर आसानी से संशोधित किया जा सकता है)। फिर भी धन्यवाद। यह अब तक का सबसे अच्छा समाधान प्रतीत होता है। – tuxx