2012-05-16 15 views
13

मैं एक प्रक्रिया गतिरोध किया जा करने के लिए प्रतीत होता है कि है:CPU उपयोग सोने के लिए उच्च संसाधित करता

# strace -p 5075 
Process 5075 attached - interrupt to quit 
futex(0x419cf9d0, FUTEX_WAIT, 5095, NULL 

यह "futex" सिस्टम कॉल पर बैठा है, और अनिश्चित काल के लिए एक ताला पर इंतजार कर रहा है। प्रक्रिया जब "टॉप" चलाया जाता है सीपीयू की एक बड़ी राशि लेने जा करने के लिए दिखाया गया है:

# top -b -n 1 
top - 23:13:18 up 113 days, 4:19, 1 user, load average: 1.69, 1.74, 1.72 
Tasks: 269 total, 1 running, 268 sleeping, 0 stopped, 0 zombie 
Cpu(s): 8.1%us, 0.1%sy, 0.0%ni, 91.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Mem: 12165696k total, 3810476k used, 8355220k free, 29440k buffers 
Swap: 8388600k total, 43312k used, 8345288k free, 879988k cached 

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
5075 omdb  18 0 2373m 1.7g 26m S 199.7 14.9 102804:11 java 

प्रक्रिया भी एक "एस" में होना दिखाया गया है - नींद राज्य, अगर यह कुछ पर इंतजार कर रहा है जो समझ में आता है संसाधन। हालांकि, मुझे समझ में नहीं आता है कि प्रक्रिया नींद की स्थिति में क्यों है, तो CPU उपयोग 200% के करीब क्यों होगा। नींद की प्रक्रिया पर ऐसे उच्च CPU उपयोग की शीर्ष रिपोर्ट क्यों करती है? क्या इसका सीपीयू उपयोग शून्य नहीं होना चाहिए?

उत्तर

5

top और प्रक्रिया की स्थिति के अनुसार CPU उपयोग के बीच कोई सहसंबंध नहीं है। man page कहते हैं (जोर मेरा):

% सीपीयू - CPU उपयोग

पिछले स्क्रीन अद्यतन के बाद बीते CPU समय का कार्य का हिस्सा है, कुल का एक प्रतिशत के रूप में व्यक्त सीपीयू समय

तो, आपकी प्रक्रिया वास्तव में अंतिम स्क्रीन अपडेट के बाद प्रोसेसर समय की एक बड़ी राशि का उपयोग करती है। यह सो रहा है, हाँ, लेकिन ऐसा इसलिए है क्योंकि वर्तमान में चल रही प्रक्रिया top है (जो समझ में आता है, क्योंकि यह वर्तमान में स्क्रीन अपडेट कर रहा है)।

+1

ठीक है, तथ्य यह है कि 'शीर्ष' चल रहा है इसका मतलब यह नहीं है कि दूसरी प्रक्रिया को सोना है। 100% से अधिक उपयोग एक बहुआयामी प्रणाली का तात्पर्य है ;-)। यद्यपि इंटरैक्टिव शैल और उपप्रोसेस यह एक साथ हो सकता है और दूसरे कार्य को सोने के कारण * हो रहा है *, लेकिन यह आवश्यक नहीं है कि किसी कारण का प्रत्यक्ष, सही? – binki

4

top आउटपुट पूरी तरह से सामान्य है।

लोड औसत गणना में ऐसी प्रक्रियाएं शामिल होती हैं जो कुछ (म्यूटेक्स/फूटेक्स, आईओ आदि) के साथ-साथ प्रक्रियाओं का इंतजार कर रही हैं जो वास्तव में सीपीयू का उपयोग कर रही हैं। इसका परीक्षण करें, कहें, कुछ ऐसा चल रहा है:

dd if=/dev/sda of=/dev/null 

और यह देखने के लिए शीर्ष आउटपुट देखना क्या होता है। आप इस लाइन को देखें, तो यह द्वारा 1.

लोड औसत में वृद्धि होगी: "91.8% आईडी" में

Cpu(s): 8.1%us, 0.1%sy, 0.0%ni, 91.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 

"आईडी" "निष्क्रिय" का मतलब है। तो सीपीयू वास्तव में बहुत कुछ नहीं कर रहा है।

2

क्या आपका आवेदन कांटा बच्चा प्रक्रिया करता है? स्ट्रेस आउटपुट इंगित कर सकता है कि मुख्य प्रक्रिया सिर्फ बाल प्रक्रियाओं को अपना काम पूरा करने की प्रतीक्षा कर रही है। यदि ऐसा है, तो आप

strace -f -p 5075 

को भी बच्चों की प्रक्रियाओं का पता लगाने का प्रयास कर सकते हैं।

संबंधित मुद्दे