मैं शेल से शीर्ष-जैसे सीपीयू आंकड़े कैसे प्राप्त कर सकता हूं?


12

मैं अपने उपयोग किए गए सीपीयू (प्रतिशत में) से एक सटीक पढ़ने की कोशिश कर रहा हूं top। यह वह कमांड है जिसे मैं परीक्षण के लिए चला रहा हूं:

top -n1 | awk '/Cpu\(s\):/ {print $2}'

यह रिटर्न:

10.7%us,

मुझे जो डेटा चाहिए उसका उचित टुकड़ा है। हालांकि, हर बार जब मैं कमांड चलाता हूं तो मुझे एक ही आउटपुट मिलता है, भले ही मैं अपने सिस्टम पर अलग-अलग लोड लागू कर रहा हूं (और यह नहीं htopबताता कि मेरा उपयोग अलग है)। ऐसा लगता है कि जब भी मैं शुरू करता हूं top, मेरा सीपीयू उपयोग समान है। कुछ फ्रेम के बाद ही यह मुझे उचित मूल्य देता है।

ऐसा नहीं लगता है कि मैं इस तरह से शीर्ष के आउटपुट को पार्स कर सकता हूं, इसलिए मैं अन्य विश्वसनीय अनुप्रयोगों की तलाश कर रहा हूं जो मुझे शेल से सटीक रीडिंग देगा। मुझे वास्तव में पसंद है कि मैं htopप्रति-कोर रीडिंग कैसे दे सकता हूं।

मैं कोशिश की है iostatऔर mpstatलेकिन वे गलत और "परिवर्तन करने के लिए धीमी गति से" मान देना लगते हैं।


2
मत करो। पूछने के लिए उचित प्रश्न यह है: मैं शेल से शीर्ष सीपीयू उपयोग के आंकड़े कैसे प्राप्त करूं?
स्टीफन जिमेनेज़

@ StéphaneGimenez धन्यवाद मैंने अपना प्रश्न संशोधित किया
n0pe

जवाबों:


12

मैं इस स्क्रिप्ट का उपयोग करता हूं ( आर्क बोर्ड पर इस धागे से ):

#!/bin/bash
read cpu a b c previdle rest < /proc/stat
prevtotal=$((a+b+c+previdle))
sleep 0.5
read cpu a b c idle rest < /proc/stat
total=$((a+b+c+idle))
CPU=$((100*( (total-prevtotal) - (idle-previdle) ) / (total-prevtotal) ))

लिनक्स में कुछ बढ़िया जानकारी / proc / - linux.die.net/man/5/proc सभी अच्छाइयों के लिए देखें । बस सावधान रहें कि ये केवल लिनक्स हैं। जब तक आप सिगार जैसी लाइब्रेरी का उपयोग नहीं करते हैं, तब तक उस जानकारी को प्राप्त करने के लिए कोई क्रॉस-प्लेटफ़ॉर्म तरीका नहीं है ।
पैट नोट्ज़

विचार अच्छा है, लेकिन कुछ विवरण गलत हैं। निष्क्रिय मान 5 वां स्तंभ है, और आपको उचित प्रतिशत प्राप्त करने के लिए आयोवाइट कॉलम (6 वां कॉलम) भी जोड़ना चाहिए। पूरी तरह से सही होने के लिए, आपको सभी "बाकी" मूल्यों को भी जोड़ना होगा, लेकिन वे अक्सर बहुत छोटे होते हैं।
पीटर आइजेंट्रूट

यदि आप "सीपीयू" कॉलम की गिनती कर रहे हैं, तो आइडल वैल्यू पाँचवाँ कॉलम है। अन्यथा, यह चौथा है।
सनस्पार्क

6

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

आउटपुट कॉलम-आधारित है, शीर्ष की तरह, इसलिए आपको परिणामों में हेरफेर करने के लिए आउटपुट आउटपुट awkया cutकरने में सक्षम होना चाहिए ।


मैंने sarमिश्रित परिणामों से पहले कोशिश की है । मैं यहाँ @ jasonwryan के उत्तर के साथ जा रहा हूँ क्योंकि मैं इसे आसानी से अपने दोनों सीपीयू कोर के साथ उपयोग का प्रतिनिधित्व करने के लिए संशोधित कर सकता हूँ।
n0pe

3

क्या आपने देखा collectl? यह आसान है क्योंकि आप अपनी आवश्यकताओं के लिए आउटपुट को दर्जी कर सकते हैं। देखें: http://collectl.sourceforge.net/


0

मुझे जो मिला वह उस व्यक्ति से मिलता-जुलता है, जो ऊपर दिए गए सवाल पर कम से कम CentOS 6 से मिलता-जुलता है। अगर मैं सिर्फ एक पुनरावृत्ति के लिए बैच मोड में शीर्ष पर हूं, तो यह एक ही आंकड़ा एकत्र करता है, लगभग ऐसा लगता है कि इसकी प्रवृत्ति क्या है इसे अंतिम बार प्रदर्शित करना याद है। लगता है कि आपको सही प्रतिशत देने के लिए डेल्टा प्राप्त करने के लिए कम से कम कुछ आंकड़े जमा करने की आवश्यकता है। 10 पुनरावृत्तियों का परीक्षण करने के बाद, मैंने पाया कि दूसरा आंकड़ा जो पॉप अप किया गया था, उसमें प्रत्येक रन पर पर्याप्त अंतर दिखाई दिया। तो, इस लाइन के माध्यम से प्राप्त करना काफी आसान है

top -b -n 2 | grep Cpu | tail -1

मैं लोड के लिए अपटाइम के साथ इसे शामिल करना पसंद करता हूं और पीएस से चुनिंदा प्रक्रियाओं का एक grep फ़िल्टर करता हूं, जैसे कि प्रश्नों को पोस्ट करता है। एक बहुत ही सरल मॉनिटर को उपनाम के साथ व्यक्त किया जा सकता है:

alias postgresmon="watch -d 'uptime;top -b -n 2 | grep Cpu | tail -1;ps -ef | grep postgres\: | grep -v idle'"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.