मेरे 24 सीपीयू में से 1 100% पर क्यों आंका गया है?


12

मेरे पास एक HP ProLiant DL380 G7 सिस्टम है जिसमें 2 6-कोर सीपीयू का उपयोग किया गया है, जिसमें हाइपर-थ्रेडिंग सक्षम है, कुल 24 तार्किक सीपीयू (जैसा कि विंडोज द्वारा देखा गया है)।

हमारे एप्लिकेशन को चलाते समय, कुल सिस्टम CPU उपयोग अच्छा है, लेकिन 24 CUP में से एक 100% पर आंकी गई है: यहाँ छवि विवरण दर्ज करें

संपादित करें: यह इस समय के दौरान सिस्टम प्रक्रिया के लिए और उच्च उपयोग के साथ प्रोसेसर के लिए PerfMon डेटा है: यहाँ छवि विवरण दर्ज करें

क्या यह सामान्य है? यदि नहीं, तो क्या उस तार्किक सीपीयू का उपयोग करने की प्रक्रिया (तों) की पहचान करने का कोई तरीका है? Windows PerfMon, ResMon, Task Manager, और Process Explorer की कोई मदद नहीं की गई है, पहचानने के अलावा कि CPU 100% पर है।


29
मेरा अनुमान है कि यह प्रयोग में है क्योंकि एक प्रक्रिया इसका उपयोग कर रही है।
होपलेस

1
आप जानते हैं कि आप ग्राफ़ पर होवर कर सकते हैं और एक संकेत प्राप्त कर सकते हैं जो आपको बताएगा कि उस प्रोसेसर पर सबसे अधिक सीपीयू क्या प्रक्रिया ले रहा है ?!
लेवेन केर्समाकेर्स 20

मुझे 100k इंटरप्ट डेल्टा के बारे में संदेह होगा। आपको एक प्रोसेस एक्सप्लोरर प्रक्रिया सूची स्क्रीनशॉट पोस्ट करना चाहिए, जहां हम यह देख सकते हैं कि यह सिस्टम, डीपीसी, इंटरप्ट जैसी चीजों के लिए क्या कहता है।
गाबे

@RyanRies; हमारे "एप्लिकेशन" में कई .Net WCF सेवाएँ हैं जो WebSphere MQ और कुछ 3rd पार्टी मॉनिटरिंग सॉफ्टवेयर भी हैं।
पैट्रिक कफ

2
एक सीपीयू से दूसरे में एक प्रक्रिया को स्थानांतरित करना अपेक्षाकृत महंगा है, इसे एक ही सीपीयू पर अनुसूचित रखने की तुलना में, इसलिए यदि कोई प्रक्रिया वास्तव में सीपीयू की मांग कर रही है, तो ओएस अक्सर इसे स्थानांतरित नहीं करना पसंद करता है।
माइकल हैम्पटन

जवाबों:


11

जैसा कि अन्य लोग पहले ही बता चुके हैं, हम उस स्क्रीनशॉट से देख सकते हैं कि जो सीपीयू इतनी मेहनत कर रहा है, वह अपना सारा समय कर्नेल मोड में बिता रहा है। (लाल रंग।)

व्यवस्थापक के रूप में पॉवर्सशेल चलाना, प्रकार:

Get-Process | Select Name, PrivilegedProcessorTime | `
Sort-Object PrivilegedProcessorTime -Descending

सूची के शीर्ष पर प्रक्रिया वर्तमान में सबसे कर्नेल मोड CPU समय का उपयोग करने वाली प्रक्रिया है। यदि वह प्रक्रिया "सिस्टम" नहीं है , तो आपने अभी पता लगाया है कि उपयोगकर्ता मोड प्रक्रिया क्या इस CPU उपयोग का कारण बन रही है। अगर उच्चतम विशेषाधिकार प्राप्त प्रोसेसर्स टाइम के साथ प्रक्रिया सिस्टम है, जिस पर मुझे संदेह है, तो यह थोड़ा अधिक जटिल है।

ओपन प्रोसेस एक्सप्लोरर। वैकल्पिक रूप से, अपना प्रतीक सर्वर सेट करें। सुनिश्चित करें कि आप पूर्ण UAC ऊंचाई के साथ चल रहे हैं। सिस्टम "प्रक्रिया" पर राइट क्लिक करें और गुण पर जाएं। फिर थ्रेड्स टैब पर जाएं। CPU उपयोग द्वारा थ्रेड्स को सॉर्ट करें। यह सब कर्नेल मोड काम करने वाला धागा यहाँ होना चाहिए। यदि आप स्टार्ट एड्रेस के तहत सूचीबद्ध मॉड्यूल को देखते हैं, तो यह आपको एक सुराग देना चाहिए कि काम किससे संबंधित है। उदाहरण के लिए, अगर यह NDIS.sys है, तो यह एक नेटवर्क इंटरफ़ेस ड्राइवर है। यदि आप प्रतीक सर्वर सेट करते हैं, तो आपको एक मॉड्यूल के भीतर एक फ़ंक्शन का नाम देखना चाहिए (जब तक कि मॉड्यूल गैर-Microsoft नहीं है), अन्यथा आपको केवल मॉड्यूल के प्रारंभ पते से एक संख्यात्मक ऑफसेट दिखाई देगा।

वैकल्पिक रूप से, Xperf का उपयोग Windows प्रदर्शन टूलकिट से प्रोफाइल इंटरप्ट, डीपीसी आदि के लिए करें।

xperf -on PROC_THREAD+LOADER+DPC+INTERRUPT

और के साथ रिकॉर्डिंग बंद करो xperf -d logfile.etl

Xperf पुराने Kernrate टूल को बदल देता है, और आपको कुछ बहुत विस्तृत डेटा नेट कर सकता है।

जब सीपीयू कर्नेल मोड में काम कर रहा होता है, तो यह ज्यादातर इंटरप्ट सर्विस रूट को चलाता है। (ISRs) जब कोई व्यवधान उत्पन्न होता है, तो उस मोड पर उपयोगकर्ता मोड का काम निलंबित हो जाता है, और CPU उस व्यवधान के लिए पंजीकृत ISR चलाता है। यदि आप अपने सीपीयू को इन अवरोधों पर समय की एक विषम राशि खर्च करते हुए पाते हैं, तो यह आमतौर पर एक दोषपूर्ण डिवाइस ड्राइवर को इंगित करता है जिसे अपडेट करने की आवश्यकता होती है।

हालांकि इस परिदृश्य के बारे में मुझे (कोई भी इरादा नहीं) बग यह है कि यह ऐसा प्रतीत होता है जैसे कि जो भी कर्नेल थ्रेड कर रहा है, वह उस एक कोर के लिए अभिप्रेरित होने लगता है । मुझे आश्चर्य है कि डिस्पैचर केवल एक ही मनमाने ढंग से कोर पर चलने के लिए थ्रेड शेड्यूल करने के लिए क्यों लगता है। इसलिए मुझे लगता है कि हमें यह जानने की जरूरत है कि जिसने भी इस डिवाइस ड्राइवर को लिखा है और उसे थ्रेडेड डीपीसी कैसे करना है, और स्पष्ट रूप से कर्नेल थ्रेड्स पर एक आत्मीयता स्थापित करने के लिए नहीं, आदि।


IIRC, OS के लिए यह काफी मानक व्यवहार है कि हार्डवेयर अवरोध को संभालने के लिए केवल एक ही CPU का उपयोग किया जाए ...
मास्सिमो

1
@ मसिमो यह पुराने ऑपरेटिंग सिस्टम के मामले में हो सकता है, लेकिन कोई और नहीं। प्रत्येक सीपीयू को अपनी स्वयं की इंटरप्ट डिस्क्रिप्टर तालिका मिलती है, और हर प्रोसेसर का अपना आईआरक्यूएल होता है। यदि एक सीपीयू किसी कारण से उच्च आईआरक्यूएल पर अटका हुआ है (यानी यह पहले से ही एक बाधा उत्पन्न कर रहा है), तो यह उसी या निचले स्तर के अवरोधों को प्राप्त नहीं कर सकता है और इसलिए विंडोज या तो दूसरे प्रोसेसर को रुकावट देगा, या बस इसे पकड़ कर रखेगा। जब तक एक CPU उपलब्ध नहीं हो जाता। यहां तक ​​कि टाइमर (केवल सीपीयू 0 पर चलने के लिए पूर्व में बदनाम एक वस्तु) में अब प्रोसेसर चयन एल्गोरिदम है।
रयान रीज

लेकिन हाँ, यह एक विरासत या खराब-लिखित ऐप चलाने के रूप में सरल हो सकता है जो खराब तरीके से संपन्न होता है, और बाद में बहुत सारे सिस्कल्स बनाता है। व्यवधानों को आमतौर पर उसी सीपीयू पर शुरू करने और समाप्त करने की आवश्यकता होती है, जहां से उन्हें बुलाया गया था ... लेकिन आम तौर पर एक भी थ्रेडेड ऐप को कोर के बीच "लोड-संतुलित" मिलेगा क्योंकि यह चला था ... यह एक अजीब लगता है आत्मीयता।
रयान रेज़

@RyanRies; मैंने सिस्टम पर विंडोज प्रदर्शन टूलकिट स्थापित किया और विंडोज प्रदर्शन रिकॉर्डर का उपयोग किया; ऊपर xperf कमांड एरर देता रहा। उच्च सीपीयू ऐसा लगता है कि यह से आ रहा है: प्रक्रिया - सिस्टम; मॉड्यूल - ntoskrnl.exe; थ्रेड - फेज़ 1 इंसुलेटिज़; फंक्शन - केज़ेरोपेजेस। यह केवल तब होता है जब ऐप चल रहा होता है, इसलिए मुझे लगता है (आशा है) मेरे पास डेवलपर्स को वापस लेने के लिए पर्याप्त है, लेकिन मुझे आपके किसी भी विचार में दिलचस्पी है।
पैट्रिक कफ

23

"टास्क मैनेजर" में "विवरण" टैब पर "सीपीयू टाइम" कॉलम दिखाएं और सीपीयू समय गणना के साथ एक प्रक्रिया की तलाश करें जो लगातार बढ़ रही है। यह आपकी वचनबद्ध प्रक्रिया है। यह लगभग 4.17% सीपीयू का लगातार उपयोग करना चाहिए।


10

यह सभी कर्नेल समय लगता है, इंटरप्ट हो सकता है, वे केवल एक ही सीपीयू द्वारा नियंत्रित हो सकते हैं।


+1 - यह सुनिश्चित करता है कि कर्नेल टाइम जैसा दिखता है, ऐसा नहीं है।
इवान एंडरसन

क्या यह "सिस्टम" प्रक्रिया के तहत दिखाई देगा? एक टेस्ट रन के दौरान हमने जो परफ़ॉर्मन डेटा एकत्र किया, उसमें "सिस्टम" प्रक्रिया के लिए 100% सीपीयू है।
पैट्रिक कफ

हां, मुझे लगता है कि यह प्रणाली के तहत आता है (यदि यह बिल्कुल सूचीबद्ध है ...)
माइकल

6
क्या यह भी एक ड्राइवर बग या खराब हार्डवेयर का एक टुकड़ा हो सकता है जिसमें बिना किसी त्रुटि सुधार के ड्राइवर के साथ बातचीत हो रही है? या हो सकता है सॉफ्टवेयर एक तंग लूप में कर्नेल में बुला रहा हो।
ज़ैन लिंक्स

1
@MichelZ, सिस्टम कॉल का एक गुच्छा बनाने वाली एक उपयोगकर्ता प्रक्रिया (जिसमें किसी भी प्रकार का I / O शामिल होगा) ऐसा दिखेगा।
पुनर्वसु

6

एक प्रक्रिया के लिए निरंतर सीपीयू के उपयोग के साथ ~ 4% (= कुल उपलब्ध सीपीयू का 1/24) देखें। कि एक ही सीपीयू को लगातार लेना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.