में मल्टीप्रोसेस अनुप्रयोग के सीपीयू उपयोग की गणना कैसे करें मैं लिनक्स में शीर्ष कमांड की तरह व्यवहार करने के लिए सी/सी ++ के साथ प्रोग्राम बनाने का प्रयास करता हूं। मैंने कुछ शोध किया है और पहले ही ज्ञात है कि प्रक्रिया के CPU उपयोग को कैसे गिनना है। हम मौजूदा समय में/proc/[PID]/stat से stime + utime की गणना करके और कई सेकंड के बाद CPU उपयोग प्राप्त कर सकते हैं। फिर स्टेम + यूटिम मतभेदों की गणना करें और परिणाम को अपटाइम मतभेदों के साथ विभाजित करें, फिर हमें CPU उपयोग प्रतिशत प्राप्त होता है। यह एकल प्रक्रिया/बहुप्रचार प्रक्रिया पर इतना आसान होगा।लिनक्स
समस्या httpd जैसे मामले में है, जहां यह multiprocess के रूप में काम करता है। जब वेबसर्वर व्यस्त होता है, httpd अनुरोधों के समूह की सेवा करने के लिए बाल प्रक्रियाओं को फोर्क करेगा। फिर मैं कुल प्रक्रिया की संख्या गिनता हूं, आइए 500 कहें। मैं उन प्रक्रियाओं के सीपीयू उपयोग की गणना करना चाहता हूं, लेकिन उन्हें सारांशित करता हूं इसलिए मुझे केवल 1 httpd CPU उपयोग दिखाई देता है। लेकिन अगर मैं उपरोक्त वर्णित एल्गोरिदम करता हूं, तो कई सेकंड के बाद प्रक्रियाओं की संख्या < 500 में घट जाती है, तो मुझे नकारात्मक मान मिलते हैं, क्योंकि गणना इस तरह होगी (उदाहरण के लिए, मैं यादृच्छिक संख्या चुनता हूं, बस , STIME + Utime के डेल्टा नकारात्मक मूल्य में परिणाम है, प्रक्रिया की संख्या के बाद से कम हो रही है कि आप ऊपर के उदाहरण देखें, तो
Uptime: 155123, No of processes : 500, Stime + Utime total of 500 processes : 3887481923874
Uptime: 155545, No of processes : 390, Stime + Utime total of 390 processes : 2887123343874
, और कुछ मिलीसेकंड के बाद कम मूल्य दे: आप संक्षिप्त विवरण दें)। मैं बस जानना चाहता हूं, क्या इस तरह की प्रक्रिया की गणना करने का कोई और तरीका इस तरह व्यवहार करता है? धन्यवाद।
आप प्रक्रियाओं के सेट को कैसे जानते हैं? इसके प्रक्रिया समूह द्वारा? कार्यक्रम के नाम से? –
सबसे पहले, मुझे मुख्य अभिभावक प्रक्रिया मिलती है। मुझे पता है क्योंकि इसमें पीपीआईडी 1 है और चलिए इसकी पिड 1227 कहें। फिर, पूरी/proc/निर्देशिका खोजें, जिसमें पीपीआईडी 1227 है। अगर/proc/pid1/stat में ppid 1227 है, तो मैं इसके utime और stime को जोड़ता हूं 1227 यूटिम और स्टेम। –