কোনও অ্যাপ্লিকেশনটির মেমরি এবং সিপিইউ ব্যবহার কীভাবে লগ করবেন?


16

প্রশ্নের অনুরূপ সিপিইউ লোড লগ কিভাবে করবেন? , আমি একটি প্রক্রিয়া স্মৃতি লগ করতে চাই।

আমি যে প্রক্রিয়াটি লগ করতে চাইছি তা দূরবর্তী সার্ভারে হত্যা করা হয় এবং আমি সিপিইউ লোড এবং মেমরির ব্যবহারটি মেরে ফেলার আগে তার সন্ধান করতে চাই।

[হালনাগাদ]

উভয় স্টেফানো প্যালাজোর ঝরঝরে সামান্য অজগর স্ক্রিপ্ট এবং

মাইকের এক লাইনের আউটপুট মানগুলি 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

আমি দুর্ভাগ্যবশত এখনো এখানে মন্তব্য করতে পারবেন না কিন্তু আপনি সুদের পোস্টটি expalining কেন খুঁজে পেতে পারেন psথেকে ভিন্ন হতে পারে top: stackoverflow.com/questions/131303/...
প্রধানমন্ত্রী

উত্তর:


16

আপনি শেলটিতে ওয়ান-লাইনার তৈরি করতে পারেন:

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

পিড = 123 দিয়ে প্রক্রিয়া লগ করতে কেবল:

logpid 123

অথবা ফাইলটিতে লগ দেখতে এবং লিখতে:

logpid $$ | tee /tmp/pid.log

আপনি যদি অন্য ডেটা লগ হতে চান তবে -o {this}বিকল্পগুলি সংশোধন করুন। man psউপলব্ধ পরামিতিগুলি ব্যবহারের জন্য "স্ট্যান্ডার্ড ফর্ম্যাট স্পেসিফায়ার্স" বিভাগটি দেখুন । আপনি যদি বিভিন্ন সময় রেজোলিউশন চান তবে sleep {this}ফাংশনে পরিবর্তন করুন logpid()


সরল এবং কাজ করে!
রাফেলবাট্টেস্তে

3

আপনি যদি topপরিসংখ্যানের পরে topঠিকঠাক হন তবে আপনি ব্যাচের মোডে চলতে পারেন যে প্রক্রিয়াটির পরে আপনি যা করছেন তা উল্লেখ করে spec আপনি যদি টাইপ করেন তবে এই পৃষ্ঠাটি থেকে উদাহরণ গ্রহণ করুন ( http://www.dedoimedo.com/computers/linux-cool-hacks.html )

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

আপনার "ব্যাচ মোডে (-বি) শীর্ষে দৌড়াতে হবে। এটি বিলম্ব (-ড) পতাকা দ্বারা নির্দিষ্ট হিসাবে প্রতি 10 সেকেন্ডে রিফ্রেশ হতে চলেছে মোট 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
প্রধানমন্ত্রী

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 টি চাপুন বা প্রক্রিয়াটি মারা যায় তখন প্রোগ্রামটিটি প্রস্থান করে।


প্রিয় স্টেফানো, আপনার স্ক্রিপ্টটির জন্য আপনাকে অনেক ধন্যবাদ। দুর্ভাগ্যক্রমে এটি ভুল ফলাফল আউটপুট বলে মনে হচ্ছে। আপনি কেন কোন ধারণা আছে? আমার আপডেট করা প্রশ্ন দেখুন।
ফ্রেমস্টার

PS7 পৃষ্ঠা থেকে man7.org/linux/man-pages/man1/ps.1.html , PS "শতাংশ হিসাবে প্রকাশিত প্রক্রিয়া চলমান (সিপিটাইম / রিয়েলটাইম অনুপাত) দ্বারা বিভক্ত ব্যবহৃত সিপিইউ সময়কে আউটপুট দেয়" "- সুতরাং আপনি সিপিইউ ব্যবহারের গড়পড়তা ব্যবহার শুরু করেছেন
নিকোলাস চার্লস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.