একটি একক প্রক্রিয়ার সিপিইউ / মেমরি ব্যবহার কীভাবে পর্যবেক্ষণ করবেন?


170

আমি রিয়েল টাইমে একটি প্রক্রিয়ার স্মৃতি / সিপিইউ ব্যবহার নিরীক্ষণ করতে চাই। অনুরূপ topকিন্তু শুধুমাত্র একটি প্রক্রিয়া লক্ষ্য, বিশেষ করে কিছু বাছাই একটি ইতিহাস গ্রাফ সঙ্গে।


আপনি কোন স্মৃতি পরিসংখ্যান চান? তাদের প্রচুর আছে।
vwduder

একটি নির্দিষ্ট সময় ফ্রেমের উপর মেমরির ব্যবহার, বর্তমান ব্যবহার, সর্বোচ্চ ব্যবহার, গড়।
জোশ কে

উত্তর:


139

লিনাক্সে, topপ্রকৃতপক্ষে একটি একক প্রক্রিয়াতে দৃষ্টি নিবদ্ধ করা সমর্থন করে যদিও স্বাভাবিকভাবে এর ইতিহাসের গ্রাফ নেই:

top -p PID

এটি ম্যাক ওএস এক্সে আলাদা সিনট্যাক্স সহ উপলভ্য:

top -pid PID

9
এবং যেহেতু আপনি প্রতিবার পিআইডি সন্ধান করতে নাও চান, তাই এর মতো কিছু চেষ্টা করুন top -p `pgrep -f /usr/bin/kvm`
স্টিফান লাসিউইস্কি

আমি কিছু স্বতন্ত্র প্রক্রিয়াগুলি পর্যবেক্ষণ করতে ক্যাকটি ব্যবহার করি, তবে এখানে পূর্ণ জিজ্ঞাসা করা সহজ পরিস্থিতিটির জন্য একটি পূর্ণ বিকাশযুক্ত ক্যাকটি ইনস্টলেশন ইনস্টল করা খুব জটিল মনে হচ্ছে।
স্টিফান লাসিউস্কি

@ স্টেফান: আমি ধরে নিচ্ছি যে দূর থেকে কি আমাকে চালাতে হবে?
জোশ কে

@ জোশ: হ্যাঁ আপনাকে অন্য সার্ভারে ক্যাকটি চালাতে হবে (যার জন্য মাইএসকিউএল, অ্যাপাচি এবং কয়েকটি অন্যান্য প্যাকেজ দরকার)। বেশিরভাগ ডিস্রোসগুলিতে, ইউম বা অ্যাপ-গেট ব্যবহার করে ইনস্টল করা বেশ সহজ।
স্টিফান লাসিউস্কি

@ স্টেফান আপনি যদি দূর থেকে পরীক্ষা করতে চান তবে আপনি এসএসএস @ hostnameরিমোটহস্টের শীর্ষ-পিআইডি> ~ _pid.txt; প্রস্থান 'এবং
ক্লার্ক

61

htopএকটি দুর্দান্ত প্রতিস্থাপন top। এটা আছে ... রঙ! সরল কীবোর্ড শর্টকাট! তীর কী ব্যবহার করে তালিকাটি স্ক্রোল করুন! পিআইডি নোট না রেখেই কোনও প্রক্রিয়া মেরে ফেলুন! একাধিক প্রক্রিয়া চিহ্নিত করুন এবং তাদের সমস্ত হত্যা!

সমস্ত বৈশিষ্ট্য মধ্যে র manpage বলেছে তুমি টিপতে পারেন Fকরার অনুসরণ একটি প্রক্রিয়া।

সত্যিই, আপনার চেষ্টা করা উচিত htop। আমি আর topপ্রথম শুরু করি নি , প্রথমবার ব্যবহার করার পরে htop

একটি একক প্রক্রিয়া প্রদর্শন করুন:

htop -p PID


7
হ্যাপের জন্য +1। এটি একটি নতুন সিস্টেমে ইনস্টল করা প্রথম প্রোগ্রামগুলির মধ্যে একটি। এটি আমার জীবনকে আরও সহজ করে তোলে। গাছের দৃশ্যটিও খুব কার্যকরী।
বার্থলেমি

9
topএছাড়াও রঙ আছে। টিপুন z
tshepang

2
তুমি ঠিক বলছো! topরং আছে! খুব খারাপ এটির রঙগুলি বেশ অকেজো, বিশেষত তুলনায় htop(যা অন্যান্য ব্যবহারকারীদের প্রক্রিয়াগুলিকে ম্লান করে দেয় এবং প্রোগ্রামের বেসনামটি হাইলাইট করে)।
ডেনিলসন সা মায়া

1
আর htop -p PIDখুব কাজ করবে, শুধু @Michael Mrozek কর্তৃক প্রদত্ত উদাহরণটি।
noisebleed

1
তারপরে কেবল শীর্ষ ব্যবহারের কারণ হ'ল হ্যাপ পাওয়া যায় না বা ইনস্টল করা যায় না। এই কারণেই আরও অনেকগুলি বৈশিষ্ট্য সরবরাহ করার জন্য হটোপ তৈরি করা হয়েছিল।
লিপ

59

psrecord

নিম্নলিখিত কোনও ধরণের ইতিহাসের গ্রাফের ঠিকানা দেয় । পাইথন psrecordপ্যাকেজ ঠিক এটি করে।

pip install psrecord                             # local user install
sudo apt-get install python-matplotlib python-tk # for plotting; or via pip

একক প্রক্রিয়া জন্য এটি নিম্নলিখিত (দ্বারা বন্ধ Ctrl+C):

psrecord $(pgrep proc-name1) --interval 1 --plot plot1.png

বেশ কয়েকটি প্রক্রিয়াগুলির জন্য নিম্নলিখিত স্ক্রিপ্টটি চার্টগুলি সিঙ্ক্রোনাইজ করতে সহায়ক:

#!/bin/bash    
psrecord $(pgrep proc-name1) --interval 1 --duration 60 --plot plot1.png &
P1=$!
psrecord $(pgrep proc-name2) --interval 1 --duration 60 --plot plot2.png &
P2=$!
wait $P1 $P2
echo 'Done'

চার্টগুলি দেখতে দেখতে: psrecord উদাহরণ

memory_profiler

প্যাকেজ আরএসএস শুধুমাত্র স্যাম্পলিং (প্লাস কিছু পাইথন-নির্দিষ্ট অপশন) প্রদান করে। এটি তার বাচ্চাদের প্রক্রিয়াগুলির সাথে প্রক্রিয়াও রেকর্ড করতে পারে (দেখুন mprof --help)।

pip install memory_profiler
mprof run /path/to/executable
mprof plot

ডিফল্টরূপে এটি টিন্টার-ভিত্তিক ( python-tkপ্রয়োজন হতে পারে) চার্ট এক্সপ্লোরারকে পপ আপ করে যা রফতানি করা যায়:

mprof

গ্রাফাইট স্ট্যাক এবং statsd

এটি সাধারণ এক-অফ পরীক্ষার জন্য ওভারকিল বলে মনে হতে পারে তবে এটি বেশ কয়েকটি দিনের ডিবাগিংয়ের মতো, নিশ্চিত, যুক্তিসঙ্গত। একটি সুবিধাজনক অল-ইন-ওয়ান raintank/graphite-stack(গ্রাফানার লেখকগণের) চিত্র psutilএবং statsdক্লায়েন্ট। procmon.pyএকটি বাস্তবায়ন সরবরাহ করে।

$ docker run --rm -p 8080:3000 -p 8125:8125/udp raintank/graphite-stack

তারপরে অন্য টার্মিনালে, লক্ষ্য প্রক্রিয়া শুরু করার পরে:

$ sudo apt-get install python-statsd python-psutil # or via pip
$ python procmon.py -s localhost -f chromium -r 'chromium.*'

তারপর এ Grafana খোলার HTTP: // স্থানীয় হোস্ট: 8080 , যেমন প্রমাণীকরণ admin:admin, ডেটাউত্স স্থাপনের HTTPS: // স্থানীয় হোস্ট তোমার মতোই একটি চার্ট প্লটে বিভক্ত করতে পারেন:

গ্রাফানা চার্ট

গ্রাফাইট-স্ট্যাক এবং টেলিগ্রাফ

পাইথন স্ক্রিপ্টের পরিবর্তে স্ট্যাটসডে মেট্রিক পাঠানো telegraf(এবং procstatইনপুট প্লাগইন) সরাসরি গ্রাফাইটে মেট্রিকগুলি প্রেরণে ব্যবহার করা যেতে পারে।

সর্বনিম্ন telegrafকনফিগারেশন দেখে মনে হচ্ছে:

[agent]
  interval = "1s"

[[outputs.graphite]]
  servers = ["localhost:2003"]
  prefix = "testprfx"

[[inputs.procstat]]
  pid_file = "/path/to/file/with.pid"

তারপরে লাইনে রান করুন telegraf --config minconf.conf। গ্রাফানার অংশটি মেট্রিকের নাম বাদে একই।

sysdig

sysdig(ডেবিয়ান এবং উবুন্টুর রেপোতে উপলব্ধ ) সিসডিগ-ইন্সপেক্ট ইউআই সহ অত্যন্ত প্রতিশ্রুতিবদ্ধ চেহারা দেখায়, সিপিইউ ব্যবহার এবং আরএসএসের সাথে চূড়ান্ত সূক্ষ্ম বিবরণ সরবরাহ করে তবে দুর্ভাগ্যক্রমে ইউআই তাদের রেন্ডার করতে অক্ষম, এবং প্রক্রিয়া অনুসারে ইভেন্টটি sysdig ফিল্টার করতে পারে না procinfo লেখার সময় যদিও, এটি কাস্টম ছিনিয়ে ( sysdigলুয়ায় লেখা একটি এক্সটেনশন) দিয়ে সম্ভব should


pgrep systemd আউটপুট একাধিক লাইন দিচ্ছে, এবং এইভাবে psrecord বাগ করে, কি করা উচিত? আমি শুধু যে কোন প্রক্রিয়া দিয়ে পরীক্ষা করতে চাই।
এরালপবি

1
@EralpB pgrep --helpরেসকিউ। কমপক্ষে --newestএবং আছে --oldest
সাজ

2
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, যেহেতু এটি আসলে একটি মেমরি ব্যবহারের ইতিহাসের প্লট দেয়। Psrecord পদ্ধতির জন্য দ্রষ্টব্য, Ctrl+Cpsrecord প্রক্রিয়াতে কোনও প্লট সংরক্ষণ না করে কেবল প্রস্থান করা হয়, আপনাকে প্রক্রিয়া-অধীন পরীক্ষাটি শেষ করতে হবে।
ব্যবহারকারী 2561747

8

স্ক্রিপ্টে সেই তথ্যটি ব্যবহার করতে আপনি এটি করতে পারেন:

calcPercCpu.sh

#!/bin/bash
nPid=$1;
nTimes=10; # customize it
delay=0.1; # customize it
strCalc=`top -d $delay -b -n $nTimes -p $nPid \
  |grep $nPid \
  |sed -r -e "s;\s\s*; ;g" -e "s;^ *;;" \
  |cut -d' ' -f9 \
  |tr '\n' '+' \
  |sed -r -e "s;(.*)[+]$;\1;" -e "s/.*/scale=2;(&)\/$nTimes/"`;
nPercCpu=`echo "$strCalc" |bc -l`
echo $nPercCpu

যেমন ব্যবহার করুন: calcPercCpu.sh 1234যেখানে 1234 পিড

নিদিষ্ট $ nPid জন্য, এটি পরিমাপ করবেন গড় 1 সেকেন্ড একটি সম্পূর্ণ মধ্যে CPU ব্যবহারের 10 স্ন্যাপশট এর (0.1s প্রতিটি বিলম্ব * nTimes = 10); এটি খুব মুহূর্তে যা ঘটছে তার একটি ভাল এবং দ্রুত নির্ভুল ফলাফল সরবরাহ করে।

আপনার প্রয়োজন অনুসারে ভেরিয়েবলগুলি সজ্জিত করুন।


উহম, সিপিইউ ব্যবহারের জন্য 10 টি প্রক্রিয়া পর্যবেক্ষণ 1?
xebeche

@xebeche "এটি 10 টি স্ন্যাপশটগুলির গড় পরিমাপ করবে " "এনটাইমস = 10; # এটি কাস্টমাইজ করুন" :)
কুম্ভ শক্তি পাওয়ার

আমি বোঝাতে চাইছিলাম যে আপনি 1 নম্বর ( $nPercCpu) পুনরুদ্ধার করতে 10 টি প্রক্রিয়া কল করেছেন : শেল, শীর্ষ, গ্রেপ, সেড, কাট ... বিসি। এই সমস্ত না থাকলেও আপনি উদাহরণস্বরূপ 1 সেড বা অ্যাওক স্ক্রিপ্টে মার্জ করতে পারেন।
xebeche

@ এক্সবেচে শীতল, বিদ্যমানটিকে আরও ভাল কমান্ড যুক্ত করার বিকল্প নির্বিশেষে নির্দ্বিধায় (বিকল্প হিসাবে), আপনি আমার কৌতূহল পেয়েছেন :)
কুম্ভ শক্তি

1
আমি আমার নিজের উত্তর যুক্ত করেছি । BTW, নোট গড়ে গণক কারণ কোনো লাভ নেই top'র আউটপুট হয় গড়ে ওভার $delay। Cf. কীভাবে সিপিইউ ব্যবহার গণনা করবেন
xebeche

5

আমি সাধারণত নিম্নলিখিত দুটি ব্যবহার করি:

  1. এইচপি ক্যালিপার : এটি আপনি কল গ্রাফ এবং অন্যান্য নিম্ন স্তরের তথ্যও পরীক্ষা করতে পারেন এটি পর্যবেক্ষণ প্রক্রিয়াগুলির জন্য এটির খুব ভাল সরঞ্জাম। তবে দয়া করে এটি কেবল ব্যক্তিগত ব্যবহারের জন্য বিনামূল্যে নোট করুন।

  2. ডিমনটোলস : ইউএনআইএক্স পরিষেবা পরিচালনার জন্য সরঞ্জামগুলির সংকলন


6
আমি বছরের পর বছর ধরে ডিমন্টল ব্যবহার করেছি। অন্যান্য প্রক্রিয়াগুলির জন্য এটি সুপারভাইজার / ওয়াচডগ হিসাবে দুর্দান্ত। এটি কীভাবে আপনাকে একটি প্রক্রিয়ার জন্য সিপিইউ / মেমরির ব্যবহার নিরীক্ষণ করতে সহায়তা করে?
স্টেফান লাসিউইস্কি

3

ব্যবহার topএবং awkএকটি সহজেই তৈরি করতে পারে যেমন% সিপিইউ ( $9) +% এমইএম ( $10) ব্যবহারের একটি কমা বিচ্ছিন্ন লগ যা পরে কোনও পরিসংখ্যান এবং গ্রাফিং সরঞ্জামে খাওয়ানো যেতে পারে।

top -b -d $delay -p $pid | awk -v OFS="," '$1+0>0 {
print strftime("%Y-%m-%d %H:%M:%S"),$1,$NF,$9,$10; fflush() }'

আউটপুট মত হবে

2019-03-26 17:43:47,2991,firefox,13.0,5.2
2019-03-26 17:43:48,2991,firefox,4.0,5.2
2019-03-26 17:43:49,2991,firefox,64.0,5.3
2019-03-26 17:43:50,2991,firefox,71.3,5.4
2019-03-26 17:43:51,2991,firefox,67.0,5.4

এটি বৃহত্তর পক্ষে ভাল ফলাফল দেয় না $delay, কারণ $delayকীভাবে topআউটপুট কাজ করে তার জন্য মুদ্রিত টাইমস্ট্যাম্পটি আসলে পিছনে । খুব বেশি বিশদে না গিয়ে, এর চারপাশে সহজ উপায় হ'ল সময়টি লগইন করা top:

top -b -d $delay -p $pid | awk -v OFS="," '$1=="top"{ time=$3 }
$1+0>0 { print time,$1,$NF,$9,$10; fflush() }'

তারপরে টাইমস্ট্যাম্পটি সঠিক, তবে আউটপুট এখনও বিলম্বিত হবে $delay


2

যদি আপনি প্রক্রিয়া নাম জানেন তবে আপনি ব্যবহার করতে পারেন

top -p $(pidof <process_name>)

8
এটি বেশ অনেক বছর আগের গ্রহণযোগ্য উত্তর, এবং এর প্রথম মন্তব্যটি বলে।
ধাগ

1

আপনার যদি কাট-ডাউন লিনাক্স বিতরণ থাকে যেখানে শীর্ষে প্রতি প্রসেস (-p) বিকল্প বা সম্পর্কিত বিকল্প নেই, আপনি প্রতিটি প্রক্রিয়াতে সিপিইউ ব্যবহারের তথ্য পেতে আপনার প্রসেসের নামের জন্য শীর্ষ কমান্ডের আউটপুট পার্স করতে পারেন।

while true;  do top -bn1 | awk '/your_process_name/ {print  $8}' ; sleep 1; done

8 আমার এমবেডড লিনাক্স বিতরণে শীর্ষ কমান্ডের আউটপুটটিতে প্রসেস প্রতি সিপিইউর প্রতিনিধিত্ব করে


1

মন্তব্য করার মতো যথেষ্ট খ্যাতি নেই, তবে পিষ্টকার্ডের জন্য আপনি একে সরাসরি, একটি প্রোগ্রাম্যাটিক উপায়ে, সরাসরি পাইথনেও কল করতে পারেন:

from psrecord.main import monitor
monitor(<pid number>, logfile = "./test.log", plot="./fig.png", include_children=True)

0

আপনার যদি কোনও নির্দিষ্ট প্রক্রিয়ার সময়কালের জন্য গড় প্রয়োজন হয় তবে উপরে জমে থাকা -c বিকল্পটি ব্যবহার করে দেখুন:

top -c a -pid PID

"-c a" ম্যাক 10.8.5 এর জন্য শীর্ষে পাওয়া গেছে।

বৈজ্ঞানিক লিনাক্সের জন্য বিকল্পটি -S, যা ইন্টারেক্টিভভাবে সেট করা যেতে পারে।


কোন সংস্করণ (গুলি) topপ্রকৃতপক্ষে এই বৈশিষ্ট্যটি সরবরাহ করে আপনি সম্ভবত আরও বিশদ যুক্ত করতে চাইবেন । ফেডোরা 19-এ আমার সংস্করণটি নেই। উবুন্টু 13.04 এও।
slm

আপনি ঠিক বলেছেন! কার্যকর কিছু খুঁজে পেয়ে আমি খুব খুশি হয়েছিলাম, আমি ভুলে গিয়েছিলাম যে আমি আমার ম্যাকটিতে ছিলাম।
কিলেথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.