එක් ක්රියාවලියක මතකය / සීපී භාවිතය තත්ය කාලීනව නිරීක්ෂණය කිරීමට මම කැමතියි. top
එක් ක්රියාවලියකට සමාන නමුත් ඉලක්ක කර ඇති, වඩාත් සුදුසු වන්නේ යම් ආකාරයක ඉතිහාස ප්රස්ථාරයක් සමඟ ය.
එක් ක්රියාවලියක මතකය / සීපී භාවිතය තත්ය කාලීනව නිරීක්ෂණය කිරීමට මම කැමතියි. top
එක් ක්රියාවලියකට සමාන නමුත් ඉලක්ක කර ඇති, වඩාත් සුදුසු වන්නේ යම් ආකාරයක ඉතිහාස ප්රස්ථාරයක් සමඟ ය.
Answers:
ලිනක්ස් හි, top
ඇත්ත වශයෙන්ම ඉතිහාස ප්රස්ථාරයක් නොමැති වුවද, තනි ක්රියාවලියක් කෙරෙහි අවධානය යොමු කිරීමට සැබවින්ම සහාය දක්වයි:
top -p PID
මෙය වෙනස් වාක්ය ඛණ්ඩයක් සහිත මැක් ඕඑස් එක්ස් හි ද ඇත:
top -pid PID
top -p `pgrep -f /usr/bin/kvm`
.
hostname
_pid.txt; exit'and
පහත දැක්වෙන්නේ කිසියම් ආකාරයක ඉතිහාස ප්රස්ථාරයක් . පයිතන් 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'
මෙම පැකේජය RSS පමණක් සාම්පලක් ගැනීම (ප්ලස් සමහර python, විශේෂිත විකල්ප) සපයයි. එහි දරුවන්ගේ ක්රියාවලි සමඟ ක්රියාවලිය පටිගත කළ හැකිය (බලන්න 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.*'
ඉන්පසු ග්රැෆානා http: // localhost: 8080 හි විවෘත කිරීම , සත්යාපනය ලෙස admin:admin
, දත්ත ප්රභවය සැකසීම https: // localhost , ඔබට පහත වගුවක් සැකසිය හැකිය:
පයිතන් ස්ක්රිප්ට් වෙනුවට ප්රමිතික ස්ටැට්ස්ඩ් වෙත යැවීම වෙනුවට 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
. ප්රමිතික නම් හැර ග්රැෆනා කොටස සමාන වේ.
pidstat
( sysstat
පැකේජයේ කොටසක් ) පහසුවෙන් විග්රහ කළ හැකි ප්රතිදානය නිපදවිය හැකිය. එය, ඔබ මෙම ක්රියාවලිය (ලිපින) වැඩිපුර ප්රමිතික අවශ්ය වන විට නඩුවේ ප්රයෝජනවත් උදා වඩාත් ප්රයෝජනවත් කණ්ඩායම් 3 (CPU, මතක හා තැටි) අඩංගු: %usr
, %system
, %guest
, %CPU
, minflt/s
, majflt/s
, VSZ
, RSS
, %MEM
, kB_rd/s
, kB_wr/s
, kB_ccwr/s
. මම එය විස්තර කළේ අදාළ පිළිතුරකිනි .
pgrep --help
ගලවා ගැනීමට. අවම වශයෙන් --newest
සහ --oldest
ඇත.
Ctrl+C
, බිම් කැබැල්ලක් සුරැකීමකින් තොරව psrecord ක්රියාවලියෙන් ඉවත්ව යන විට, ඔබ ක්රියාවලිය යටතේ පරීක්ෂණය අවසන් කළ යුතුය.
psrecord
හොඳින් වැඩ කළා, ස්තූතියි. GUI (X11) රහිත සේවාදායකයක එය වැඩ කිරීමට මට stackoverflow.com/a/37605654/3018750matplotlibrc
හි විස්තර කර ඇති පරිදි වින්යාස කිරීමට සිදු විය
psrecord
වහාම පැතිකඩ කිරීමට අවශ්ය නම් සරල එක්-ලයිනර් : my-command & psrecord $! --interval 1 --plot plot1.png
. $!
අවසන් වරට ක්රියාත්මක කළ විධානයෙහි PID නැවත ලබා දෙයි, එබැවින් ඔබට අවශ්ය නොවේ pgrep
. වෙන්වූ තනි &
ලකුණු භාවිතා කිරීම my-command
, එයින් අදහස් වන්නේ ධාවනය වීමට පෙර කවචය එය අවසන් වන තෙක් බලා නොසිටින psrecord
බවයි.
htop
යනු විශිෂ්ට ආදේශනයකි top
. එහි ඇත ... වර්ණ! සරල යතුරුපුවරු කෙටිමං! ඊතල යතුරු භාවිතයෙන් ලැයිස්තුව අනුචලනය කරන්න! PID සැලකිල්ලට නොගෙන ක්රියාවලියකින් තොරව මරන්න! බහුවිධ ක්රියාවලීන් සලකුණු කොට ඒවා සියල්ලම මරා දමන්න!
සියලුම අංග අතර, ක්රියාවලියක් අනුගමනයF කිරීමට ඔබට එබිය හැකි බව මෑන්පේජ් පවසයි .
ඇත්තටම, ඔබ උත්සාහ කළ යුතුයි htop
. top
පළමු වතාවට පසුව මම නැවත ආරම්භ කළේ නැත htop
.
තනි ක්රියාවලියක් පෙන්වන්න:
htop -p PID
top
වර්ණ ද ඇත. ඔබන්න z
.
top
වර්ණ ඇත! එහි වර්ණ ඉතා නරක ය, විශේෂයෙන් සසඳන විට htop
(වෙනත් පරිශීලකයින්ගේ ක්රියාවලීන් මැකී යන අතර වැඩසටහන් මූලික නම ඉස්මතු කරයි).
htop -p PID
දැන් @Michael Mrozek දෙනු ලැබූ ආදර්ශය මෙන් ද කටයුතු කරනු ඇත.
ස්ක්රිප්ට් එකක එම තොරතුරු භාවිතා කිරීමට ඔබට මෙය කළ හැකිය:
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 යනු පිඩ් ය
නිශ්චිත P nPid සඳහා, එය තත්පර 1 ක කාලයක් තුළ cpu භාවිතයේ සාමාන්ය ස්නැප්ෂොට් 10 ක් මනිනු ඇත (එක් එක් තත්පර 0.1 ක ප්රමාදය * n ටයිම්ස් = 10); එය මේ මොහොතේ සිදුවෙමින් පවතින දේ පිළිබඳ හොඳ සහ වේගවත් නිවැරදි ප්රති result ලයක් සපයයි.
ඔබේ අවශ්යතාවයන් සඳහා විචල්යයන් වෙනස් කරන්න.
$nPercCpu
) ලබා ගැනීම සඳහා ඔබ ක්රියාවලි 10 ක් කැඳවීමට මා කැමති නැතැයි මම අදහස් කළෙමි : ෂෙල්, ඉහළ, ග්රෙප්, සෙඩ්, කට් ... බීසී. බොහෝමයක් එසේ නොවේ නම් ඔබට 1 සෙඩ් හෝ අව්ක් ස්ක්රිප්ටයට ඒකාබද්ධ කළ හැකිය.
top
තේවලින් වේ සාමාන්ය කට $delay
. සී. CPU භාවිතය ගණනය කරන්නේ කෙසේද
මම සාමාන්යයෙන් පහත සඳහන් දෙක භාවිතා කරමි:
HP කැලිපරය : ක්රියාවලි අධීක්ෂණය කිරීම සඳහා එහි ඉතා හොඳ මෙවලමක් වන අතර ඔබට ඇමතුම් ප්රස්ථාරය සහ අනෙකුත් පහත් මට්ටමේ තොරතුරු ද පරීක්ෂා කළ හැකිය. නමුත් එය නොමිලේ පුද්ගලික භාවිතය සඳහා පමණක් සටහන් කරන්න.
daemontools : යුනික්ස් සේවා කළමනාකරණය සඳහා මෙවලම් එකතුවකි
භාවිතා කිරීමෙන් top
සහ awk
කෙනෙකුට පහසුවෙන් නිර්මාණය කළ හැකිය. කොමා වලින් වෙන් කරන ලද% CPU ( $9
) +% MEM ( $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
මෙය විශාල වශයෙන් හොඳ ප්රති results ල ලබා නොදෙන $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>)
අදහස් දැක්වීමට ප්රමාණවත් කීර්තියක් නැත, නමුත් psrecord සඳහා ඔබට එය කෙලින්ම, ක්රමලේඛ ආකාරයකින්, කෙලින්ම පයිතන් ලෙස හැඳින්විය හැකිය:
from psrecord.main import monitor
monitor(<pid number>, logfile = "./test.log", plot="./fig.png", include_children=True)
මම මෙහි ටිකක් ප්රමාදයි, නමුත් මම පෙරනිමියෙන් මගේ විධාන රේඛා උපක්රමය බෙදා ගන්නෙමි ps
WATCHED_PID=$({ command_to_profile >log.stdout 2>log.stderr & } && echo $!);
while ps -p $WATCHED_PID --no-headers --format "etime pid %cpu %mem rss"; do
sleep 1
done
මම මෙය එක් ලයිනර් ලෙස භාවිතා කරමි. මෙන්න පළමු පේළිය විධානයට වෙඩි තබා PID විචල්යයේ ගබඩා කරයි. එවිට ps විසින් ගත වූ කාලය, PID ප්රතිශත CPU භාවිතා කිරීම, ප්රතිශත මතකය සහ RSS මතකය මුද්රණය කරනු ඇත. ඔබට වෙනත් ක්ෂේත්රද එකතු කළ හැකිය.
ක්රියාවලිය අවසන් වූ වහාම, ps
විධානය "සාර්ථකත්වය" ලබා නොදෙන අතර while
ලූපය අවසන් වේ.
ඔබට පැතිකඩ කිරීමට අවශ්ය PID දැනටමත් ක්රියාත්මක වන්නේ නම් ඔබට පළමු පේළිය නොසලකා හැරිය හැක. අපේක්ෂිත හැඳුනුම්පත විචල්යයේ තබන්න.
ඔබට මේ වගේ ප්රතිදානයක් ලැබෙනු ඇත:
00:00 7805 0.0 0.0 2784
00:01 7805 99.0 0.8 63876
00:02 7805 99.5 1.3 104532
00:03 7805 100 1.6 129876
00:04 7805 100 2.1 170796
00:05 7805 100 2.9 234984
00:06 7805 100 3.7 297552
00:07 7805 100 4.0 319464
00:08 7805 100 4.2 337680
00:09 7805 100 4.5 358800
00:10 7805 100 4.7 371736
....
ඔබට එක් ක්රියාවලියකට (-p) විකල්පයක් හෝ ඊට අදාළ විකල්පයන් නොමැති කප්පාදු ලිනක්ස් බෙදාහැරීමක් තිබේ නම්, එක් ක්රියාවලියකට CPU භාවිත තොරතුරු ලබා ගැනීම සඳහා ඔබේ ක්රියාවලි නාමය සඳහා ඉහළ විධානයේ ප්රතිදානය විග්රහ කළ හැකිය.
while true; do top -bn1 | awk '/your_process_name/ {print $8}' ; sleep 1; done
8 මගේ කාවැද්දූ ලිනක්ස් බෙදාහැරීමේ ඉහළ විධානයේ ප්රතිදානයේ එක් ක්රියාවලියකට CPU භාවිතය නිරූපණය කරයි
නිශ්චිත ක්රියාවලියක කාල සීමාවක් සඳහා ඔබට සාමාන්යය අවශ්ය නම්, ඉහළ සමුච්චිත -c විකල්පය උත්සාහ කරන්න:
top -c a -pid PID
මැක් 10.8.5 සඳහා ඉහළින් "-c a" හමු විය.
විද්යාත්මක ලිනක්ස් සඳහා, විකල්පය -S වේ, එය අන්තර්ක්රියාකාරීව සැකසිය හැකිය.
top
ඇත්ත වශයෙන්ම මෙම අංගය සපයන අනුවාදය (ය) පිළිබඳ වැඩිදුර තොරතුරු එක් කිරීමට ඔබට අවශ්ය වනු ඇත . ෆෙඩෝරා 19 හි මගේ අනුවාදය නැත. උබුන්ටු 13.04 හි ද එසේමය.