লিনাক্সে কীভাবে কোনও অ্যাপ্লিকেশনের পিক মেমরি শেষ হওয়ার পরে পরিমাপ করা যায়


11

লিনাক্সে চলমান কোনও অ্যাপ্লিকেশনটির শিখর স্মৃতি আমি কীভাবে পরিমাপ করব?

আমি এই অ্যাপটিকে ব্যাচে চালিত করি তাই আরএসএস ব্যবহার করতে পারি না, এটি বর্তমান স্মৃতিটির রিপোর্ট করে। অ্যাপ্লিকেশনটি শেষের দিকে জানাতে ব্যবহৃত হয়েছে এমন আমার শিখর মেমরিটি দরকার।

ভিএমপিক কোনও সমাধান নয়, কারণ এটি বরাদ্দ মেমরির প্রতিবেদন করে এবং আসল রাম থেকে নয়, হার্ড ডিস্ক থেকেও গণনা করে।


আপনি কোন ওএস এ অ্যাপ্লিকেশনটি চালাচ্ছেন?
একটি সিভিএন

আমি লিনাক্স
des_user

এই থ্রেডটি আপনার পক্ষে সহায়ক হতে পারে: serverfault.com/questions/387268/…
জ্যাকব কলম্যান

উত্তর:


13

প্রক্রিয়াগুলির শীর্ষ মেমরির ব্যবহার ট্র্যাক করার জন্য এখানে দুটি পদ্ধতি রয়েছে।

দরবিগলিত

আমি এই সরঞ্জামটি ব্যবহার করি নি তবে এটি আপনি যা খুঁজছেন তা মনে হচ্ছে। এটা তোলে বলা হচ্ছে দরবিগলিত

বিবরণ

সিরাপি একটি পাইথন স্ক্রিপ্ট যা নিয়মিতভাবে এক বা একাধিক চলমান প্রক্রিয়ার মেমরি এবং সিপিইউ লোডের স্ন্যাপশট নেয়, যাতে তাদের সিস্টেমের সংস্থানগুলির ব্যবহারের গতিশীলভাবে প্রোফাইল তৈরি করতে পারে।

উদাহরণ

$ syrupy.py myprog

  PID DATE        TIME     ELAPSED  CPU   MEM    RSS   VSIZE
14634 2008-10-10  20:45:25   00:00  0.0   0.0   2996    6680
14634 2008-10-10  20:45:26   00:01  105   0.2   7804   12592
14634 2008-10-10  20:45:27   00:02  103   0.2   8996   13776
14634 2008-10-10  20:45:28   00:03  103   0.2  10468   15348
14634 2008-10-10  20:45:29   00:04  103   0.3  11412   16396
14634 2008-10-10  20:45:30   00:05  104   0.3  12492   17444

/usr/bin/time -v

হ্যাঁ হাস্যকরভাবে জিএনইউ টাইম কমান্ড আপনাকে কোনও প্রক্রিয়াটির সর্বোচ্চ মেমরি ব্যবহার করতে পারে। এটি তাই মত শিখর মেমরির রিপোর্ট: Maximum resident set size (kbytes)

উদাহরণ

$ /usr/bin/time -v ~/projects/prime_numbers/eratosthenes_prime_sieve.pl 10 1000000
...

    Command being timed: "/home/saml/projects/prime_numbers/eratosthenes_prime_sieve.pl 10 1000000"
    User time (seconds): 1.12
    System time (seconds): 0.05
    Percent of CPU this job got: 54%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.19
    Average shared text size (kbytes): 0
    Average unshared data size (kbytes): 0
    Average stack size (kbytes): 0
    Average total size (kbytes): 0
    Maximum resident set size (kbytes): 79304
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 20014
    Voluntary context switches: 83
    Involuntary context switches: 274
    Swaps: 0
    File system inputs: 0
    File system outputs: 0
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0

তথ্যসূত্র


3

যদিও বিষয়টি বেশ পুরানো, আমি সিগ্রুপ লিনাক্স কার্নেল বৈশিষ্ট্য থেকে উদ্ভূত অন্য একটি প্রকল্প ভাগ করতে চাই।

https://github.com/gsauthof/cgmemtime :

সিজিএমটাইম একটি প্রক্রিয়া এবং এর বংশধর প্রক্রিয়াগুলির উচ্চ-জল আরএসএস + ক্যাস মেমরির ব্যবহার পরিমাপ করে।

এটি করতে সক্ষম হওয়ায় এটি প্রক্রিয়াটিকে তার নিজস্ব ক্রুপে ফেলে দেয়।

উদাহরণস্বরূপ প্রক্রিয়া A 10 মাইবি বরাদ্দ করে এবং এমন 20 টি মাইবি বরাদ্দকারী একটি শিশুকে কাঁটাচামচ করে এবং এটি এমন 30 টি মাইবি বরাদ্দকারী একটি শিশু সিকে কাঁটাচামচ করে। তিনটি প্রক্রিয়া একটি টাইম উইন্ডো ভাগ করে যেখানে তাদের বরাদ্দগুলির ফলে সম্পর্কিত আরএসএস (আবাসিক সেট আকার) মেমরির ব্যবহার হয়।

এখন প্রশ্ন: এ চলার ফলে আসলে কত স্মৃতি ব্যবহৃত হয়?

উত্তর: 60 এমআইবি

সিজিএমটাইম হ'ল এই জাতীয় প্রশ্নের উত্তর দেওয়ার হাতিয়ার।

ব্যবহারের উদাহরণগুলি হ'ল:

$ sudo ./cgmemtime --setup -g <myusergroup> --perm 775

$ ./cgmemtime ./testa x 10 20 30
Parent PID is 27189
Allocating 10 MiBs
New Child: 27193
Allocating 20 MiBs
New Child: 27194
Allocating 30 MiBs
Child user:    0.000 s
Child sys :    0.005 s
Child wall:    6.006 s
Child high-water RSS                    :      11648 KiB
Recursive and acc. high-water RSS+CACHE :      61840 KiB

$ ./cgmemtime python -c 'print range(100000)[48517]'
48517
Child user:    0.014 s
Child sys :    0.014 s
Child wall:    0.029 s
Child high-water RSS                    :       9948 KiB
Recursive and acc. high-water RSS+CACHE :       5724 KiB

সুতরাং, কীভাবে এই সরঞ্জামটি কোনও প্রোগ্রামের শীর্ষস্থানীয় র‌্যামের ব্যবহারটি সেই প্রোগ্রামটি বেরিয়ে যাওয়ার পরে রিপোর্ট করার জন্য ব্যবহার করা যেতে পারে ?
টেরডন

@terdon এটি cgroups wait4( memory.max_usage_in_bytes) এর সাথে সংমিশ্রণে প্রক্রিয়া প্রস্থানটি ধরতে ব্যবহার করে , যা মনে হয় এটি বোধগম্য। আরও বিস্তারিত গিথুব এ রিডমায় পাওয়া যায়।
ভ্লাদ ফ্রলোভ

ধন্যবাদ, তবে আমার বক্তব্যটি আপনার উত্তর সম্পর্কে আরও ছিল। যেমন দাঁড়িয়েছে, এটি প্রশ্নের উত্তর দিচ্ছে না, কেবল এমন কিছু বাহ্যিক সংস্থানকে নির্দেশ করছে যা সক্ষম হতে পারে। এছাড়াও, আপনি ঠিক একই উত্তরটি অন্যত্র পোস্ট করেছেন যা একটি স্বয়ংক্রিয় পতাকা উত্থাপন করে। দয়া করে আপনার উত্তরটি সম্পাদনা করুন এবং একটি উদাহরণ অন্তর্ভুক্ত করুন যা দেখায় যে এই প্রোগ্রামটি কীভাবে ওপি চাইবে তা করতে পারে।
টেরডন

2
@terdon হ্যাঁ, আমি করেছি! কারণ আমি একই প্রশ্নের সন্ধান করেছি এবং প্রশ্নগুলি বেশ একই রকম এবং উত্তরগুলি সমস্ত একই: 'পার্স পিএস আউটপুট', যা পাগল! আমি এক সপ্তাহ আগে সিজিএমটাইম প্রকল্পে দুর্ঘটনাক্রমে ধাক্কা খেয়ে কাটিয়েছি, যা আমি এই মন্তব্য করেছিলাম এমন সমস্ত প্রশ্নের নিখুঁত মিল!
ভ্লাদ ফ্রোলভ

1
যথেষ্ট ফর্সা। এটি কীভাবে ব্যবহার করা যায় তার একটি উদাহরণ দিতে পারলে এটি দুর্দান্ত। এটি আপনার উত্তর উন্নত করবে। যাই হোক না কেন, এটি পোস্ট করার জন্য সময় দেওয়ার জন্য ধন্যবাদ, আমি নিশ্চিত যে অন্যরা এটি দরকারী বলে মনে করবে।
টেরডন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.