আমি রিয়েল টাইমে একটি প্রক্রিয়ার স্মৃতি / সিপিইউ ব্যবহার নিরীক্ষণ করতে চাই। অনুরূপ topকিন্তু শুধুমাত্র একটি প্রক্রিয়া লক্ষ্য, বিশেষ করে কিছু বাছাই একটি ইতিহাস গ্রাফ সঙ্গে।
আমি রিয়েল টাইমে একটি প্রক্রিয়ার স্মৃতি / সিপিইউ ব্যবহার নিরীক্ষণ করতে চাই। অনুরূপ topকিন্তু শুধুমাত্র একটি প্রক্রিয়া লক্ষ্য, বিশেষ করে কিছু বাছাই একটি ইতিহাস গ্রাফ সঙ্গে।
উত্তর:
লিনাক্সে, topপ্রকৃতপক্ষে একটি একক প্রক্রিয়াতে দৃষ্টি নিবদ্ধ করা সমর্থন করে যদিও স্বাভাবিকভাবে এর ইতিহাসের গ্রাফ নেই:
top -p PID
এটি ম্যাক ওএস এক্সে আলাদা সিনট্যাক্স সহ উপলভ্য:
top -pid PID
top -p `pgrep -f /usr/bin/kvm`।
hostnameরিমোটহস্টের শীর্ষ-পিআইডি> ~ _pid.txt; প্রস্থান 'এবং
htopএকটি দুর্দান্ত প্রতিস্থাপন top। এটা আছে ... রঙ! সরল কীবোর্ড শর্টকাট! তীর কী ব্যবহার করে তালিকাটি স্ক্রোল করুন! পিআইডি নোট না রেখেই কোনও প্রক্রিয়া মেরে ফেলুন! একাধিক প্রক্রিয়া চিহ্নিত করুন এবং তাদের সমস্ত হত্যা!
সমস্ত বৈশিষ্ট্য মধ্যে র manpage বলেছে তুমি টিপতে পারেন Fকরার অনুসরণ একটি প্রক্রিয়া।
সত্যিই, আপনার চেষ্টা করা উচিত htop। আমি আর topপ্রথম শুরু করি নি , প্রথমবার ব্যবহার করার পরে htop।
একটি একক প্রক্রিয়া প্রদর্শন করুন:
htop -p PID
topএছাড়াও রঙ আছে। টিপুন z।
topরং আছে! খুব খারাপ এটির রঙগুলি বেশ অকেজো, বিশেষত তুলনায় htop(যা অন্যান্য ব্যবহারকারীদের প্রক্রিয়াগুলিকে ম্লান করে দেয় এবং প্রোগ্রামের বেসনামটি হাইলাইট করে)।
htop -p PIDখুব কাজ করবে, শুধু @Michael Mrozek কর্তৃক প্রদত্ত উদাহরণটি।
নিম্নলিখিত কোনও ধরণের ইতিহাসের গ্রাফের ঠিকানা দেয় । পাইথন 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'
প্যাকেজ আরএসএস শুধুমাত্র স্যাম্পলিং (প্লাস কিছু পাইথন-নির্দিষ্ট অপশন) প্রদান করে। এটি তার বাচ্চাদের প্রক্রিয়াগুলির সাথে প্রক্রিয়াও রেকর্ড করতে পারে (দেখুন mprof --help)।
pip install memory_profiler
mprof run /path/to/executable
mprof plot
ডিফল্টরূপে এটি টিন্টার-ভিত্তিক ( python-tkপ্রয়োজন হতে পারে) চার্ট এক্সপ্লোরারকে পপ আপ করে যা রফতানি করা যায়:
এটি সাধারণ এক-অফ পরীক্ষার জন্য ওভারকিল বলে মনে হতে পারে তবে এটি বেশ কয়েকটি দিনের ডিবাগিংয়ের মতো, নিশ্চিত, যুক্তিসঙ্গত। একটি সুবিধাজনক অল-ইন-ওয়ান 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 ফিল্টার করতে পারে না procinfo লেখার সময় যদিও, এটি কাস্টম ছিনিয়ে ( sysdigলুয়ায় লেখা একটি এক্সটেনশন) দিয়ে সম্ভব should
pgrep --helpরেসকিউ। কমপক্ষে --newestএবং আছে --oldest।
Ctrl+Cpsrecord প্রক্রিয়াতে কোনও প্লট সংরক্ষণ না করে কেবল প্রস্থান করা হয়, আপনাকে প্রক্রিয়া-অধীন পরীক্ষাটি শেষ করতে হবে।
স্ক্রিপ্টে সেই তথ্যটি ব্যবহার করতে আপনি এটি করতে পারেন:
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); এটি খুব মুহূর্তে যা ঘটছে তার একটি ভাল এবং দ্রুত নির্ভুল ফলাফল সরবরাহ করে।
আপনার প্রয়োজন অনুসারে ভেরিয়েবলগুলি সজ্জিত করুন।
$nPercCpu) পুনরুদ্ধার করতে 10 টি প্রক্রিয়া কল করেছেন : শেল, শীর্ষ, গ্রেপ, সেড, কাট ... বিসি। এই সমস্ত না থাকলেও আপনি উদাহরণস্বরূপ 1 সেড বা অ্যাওক স্ক্রিপ্টে মার্জ করতে পারেন।
top'র আউটপুট হয় গড়ে ওভার $delay। Cf. কীভাবে সিপিইউ ব্যবহার গণনা করবেন
আমি সাধারণত নিম্নলিখিত দুটি ব্যবহার করি:
এইচপি ক্যালিপার : এটি আপনি কল গ্রাফ এবং অন্যান্য নিম্ন স্তরের তথ্যও পরীক্ষা করতে পারেন এটি পর্যবেক্ষণ প্রক্রিয়াগুলির জন্য এটির খুব ভাল সরঞ্জাম। তবে দয়া করে এটি কেবল ব্যক্তিগত ব্যবহারের জন্য বিনামূল্যে নোট করুন।
ডিমনটোলস : ইউএনআইএক্স পরিষেবা পরিচালনার জন্য সরঞ্জামগুলির সংকলন
ব্যবহার 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।
যদি আপনি প্রক্রিয়া নাম জানেন তবে আপনি ব্যবহার করতে পারেন
top -p $(pidof <process_name>)
আপনার যদি কাট-ডাউন লিনাক্স বিতরণ থাকে যেখানে শীর্ষে প্রতি প্রসেস (-p) বিকল্প বা সম্পর্কিত বিকল্প নেই, আপনি প্রতিটি প্রক্রিয়াতে সিপিইউ ব্যবহারের তথ্য পেতে আপনার প্রসেসের নামের জন্য শীর্ষ কমান্ডের আউটপুট পার্স করতে পারেন।
while true; do top -bn1 | awk '/your_process_name/ {print $8}' ; sleep 1; done
8 আমার এমবেডড লিনাক্স বিতরণে শীর্ষ কমান্ডের আউটপুটটিতে প্রসেস প্রতি সিপিইউর প্রতিনিধিত্ব করে
মন্তব্য করার মতো যথেষ্ট খ্যাতি নেই, তবে পিষ্টকার্ডের জন্য আপনি একে সরাসরি, একটি প্রোগ্রাম্যাটিক উপায়ে, সরাসরি পাইথনেও কল করতে পারেন:
from psrecord.main import monitor
monitor(<pid number>, logfile = "./test.log", plot="./fig.png", include_children=True)
আপনার যদি কোনও নির্দিষ্ট প্রক্রিয়ার সময়কালের জন্য গড় প্রয়োজন হয় তবে উপরে জমে থাকা -c বিকল্পটি ব্যবহার করে দেখুন:
top -c a -pid PID
"-c a" ম্যাক 10.8.5 এর জন্য শীর্ষে পাওয়া গেছে।
বৈজ্ঞানিক লিনাক্সের জন্য বিকল্পটি -S, যা ইন্টারেক্টিভভাবে সেট করা যেতে পারে।
topপ্রকৃতপক্ষে এই বৈশিষ্ট্যটি সরবরাহ করে আপনি সম্ভবত আরও বিশদ যুক্ত করতে চাইবেন । ফেডোরা 19-এ আমার সংস্করণটি নেই। উবুন্টু 13.04 এও।