मेमोरी और सीपीयू का उपयोग कैसे करें?


16

प्रश्न के समान सीपीयू लोड कैसे करें? , मैं एक प्रक्रिया की स्मृति लॉग करना चाहते हैं।

मैं जिस प्रक्रिया को लॉग इन करना चाहता हूं, वह एक रिमोट सर्वर पर मारी जाती है, और मैं सीपीयू लोड और मेमोरी यूसेज को मरने से ठीक पहले पता लगाना चाहता हूं।

[अपडेट करें]

दोनों Stefano Palazzo की छोटी सी अजगर स्क्रिप्ट और

मिशैल की एक लाइन आउटपुट वैल्यू है जो topसीपीयू और मेम की तुलना में छोटी है । क्या आपके पास एक विचार है क्यों?

उत्पादन शीर्ष:

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 
2312 schXX     20   0 1241m 328m  58m S  100  0.3  11:56.68 MATLAB 

आउटपुट स्टेफानो पलाज़ो की अजगर स्क्रिप्ट:

python memlogger.py 2312
%CPU    %MEM
76.00   0.20
76.00   0.20

मैं दुर्भाग्य से अभी तक यहाँ टिप्पणी नहीं कर सकता, लेकिन आप ब्याज के इस पद को क्यों पा psसकते हैं, इससे भिन्न क्यों हो सकते हैं top: stackoverflow.com/questions/131303/…
PM

जवाबों:


16

आप शेल में वन-लाइनर बना सकते हैं:

logpid() { while sleep 1; do  ps -p $1 -o pcpu= -o pmem= ; done; }

pid = 123 के साथ प्रक्रिया लॉग इन करने के लिए:

logpid 123

या फ़ाइल में लॉग देखने और लिखने के लिए:

logpid $$ | tee /tmp/pid.log

यदि आप चाहते हैं कि अन्य डेटा लॉग किया जाए, तो -o {this}विकल्पों को संशोधित करें। man psउपयोग करने के लिए उपलब्ध मापदंडों के लिए अनुभाग "मानक प्रारूप विनिर्देशक" देखें । यदि आप अलग-अलग समय संकल्प चाहते हैं, तो sleep {this}फ़ंक्शन में परिवर्तन करें logpid()


सरल और काम करता है!
राफेलबेटेस्टी

3

यदि आप topआंकड़ों के बाद ठीक हैं, तो आप topबैच मोड में चल सकते हैं जो उस प्रक्रिया की पीड को निर्दिष्ट करता है जो आप बाद में हैं। यदि आप टाइप करते हैं तो इस पृष्ठ से उदाहरण लेना ( http://www.dedoimedo.com/ कंप्यूटर्स / क्लिन- cool-hacks.html)

top -b -d 10 -n 3 >> top-file

आपके पास "बैच मोड (-b) में टॉप रनिंग होगा। यह प्रत्येक 10 सेकंड को रीफ्रेश करने वाला है, जैसा कि देरी (-d) ध्वज द्वारा निर्दिष्ट है, कुल 3 पुनरावृत्तियों (-n) के लिए। आउटपुट भेजा जाएगा। एक फ़ाइल के लिए। " -pआपको शामिल करना pidउस प्रक्रिया को निर्दिष्ट कर सकता है जो आप बाद में हैं। यह निश्चित रूप से विशुद्ध रूप से सीपीयू और रैम से अधिक लौटेगा, लेकिन इसमें थोस फ़ील्ड होंगे। उदाहरण के लिए मेरे मामले में मुझे निम्नलिखित मिलेगा जब निगरानी 9189 का उपयोग करके top -b -d 10 -n 3 -p 9189 >> ~/top-file:

PID  USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
9189 pmj27     20   0 1617016 808112  27916 S   0.0  0.3   1:36.63 gedit

यह पृष्ठ, हालाँकि यह किसी फ़ाइल पर पुनर्निर्देशन नहीं करता है, कुछ और परिष्कारित संशोधनों को करता है जिससे आप केवल सीपीयू को प्राप्त कर सकते हैं। यदि आप किसी व्यक्ति को किसी फ़ाइल में आउटपुट को पुनर्निर्देशित करने का एक अच्छा तरीका जानते हैं और समय-समय पर इसे अपडेट करते हैं तो मुझे जानने में दिलचस्पी होगी। watchइसके लिए मुझे आदर्श नहीं लगता: superuser.com/questions/281347/filtering-top-command-output
PM

2

इस सरल अजगर स्क्रिप्ट को वही करना चाहिए जो आप चाहते हैं:

import time
import string
import sys
import commands

def get_cpumem(pid):
    d = [i for i in commands.getoutput("ps aux").split("\n")
        if i.split()[1] == str(pid)]
    return (float(d[0].split()[2]), float(d[0].split()[3])) if d else None

if __name__ == '__main__':
    if not len(sys.argv) == 2 or not all(i in string.digits for i in sys.argv[1]):
        print("usage: %s PID" % sys.argv[0])
        exit(2)
    print("%CPU\t%MEM")
    try:
        while True:
            x,y = get_cpumem(sys.argv[1])
            if not x:
                print("no such process")
                exit(1)
            print("%.2f\t%.2f" % (x,y))
            time.sleep(0.5)
    except KeyboardInterrupt:
        print
        exit(0)

आपको पहले उस कार्यक्रम की प्रक्रिया आईडी का पता लगाना होगा जिसे आप मॉनिटर करना चाहते हैं, फिर आप स्क्रिप्ट को तर्क के रूप में पीआईडी ​​के साथ चला सकते हैं:

python log.py 3912

यह प्रति सेकंड दो बार सीपीयू उपयोग और राम उपयोग को मुद्रित करेगा:

%CPU    %MEM
0.90    0.40
1.43    0.40
8.21    0.40
...

आप बाद में एक स्प्रेडशीट में आयात करने के लिए एक फ़ाइल में इसके उत्पादन को पुनर्निर्देशित कर सकते हैं ( python log.py 9391 > firefox_log.txt) और Tabअपने विभाजक के रूप में एक स्प्रेडशीट में डेटा आयात कर सकते हैं ।

जब आप Ctrl + C मारते हैं या जब प्रक्रिया मार दी जाती है, तो यह प्रोग्राम क्विट करता है।


प्रिय स्टेफानो, आपकी स्क्रिप्ट के लिए बहुत-बहुत धन्यवाद। दुर्भाग्य से यह गलत परिणामों का उत्पादन करने लगता है। क्या आपके पास कोई विचार है क्यों? कृपया मेरा अद्यतन प्रश्न देखें।
फ्रैमेस्टर

पीएस मैन पेज man7.org/linux/man-pages/man1/ps.1.html से , पीएस "एक समय के रूप में प्रक्रिया चल रहा है (cputime / realtime अनुपात) द्वारा विभाजित सीपीयू समय का उपयोग करता है, प्रतिशत के रूप में व्यक्त किया गया" "- इसलिए आपको सीपीयू का औसत मिलता है जब से यह शुरू हुआ है
निकोलस चार्ल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.