Bir işlemin bellek / cpu kullanımını gerçek zamanlı olarak izlemek istiyorum. Buna benzer, top
ancak yalnızca bir işlemde, tercihen bir tür geçmiş grafikle hedeflenmiştir.
Bir işlemin bellek / cpu kullanımını gerçek zamanlı olarak izlemek istiyorum. Buna benzer, top
ancak yalnızca bir işlemde, tercihen bir tür geçmiş grafikle hedeflenmiştir.
Yanıtlar:
Linux'ta, top
aslında bir geçmiş grafiği bulunmamasına rağmen , aslında tek bir sürece odaklanmayı destekler:
top -p PID
Bu, Mac OS X'te farklı bir sözdizimi ile de mevcuttur:
top -pid PID
top -p `pgrep -f /usr/bin/kvm`
.
hostname
_pid.txt; exit'and
htop
için harika bir alternatiftir top
. O ... Renkler! Basit klavye kısayolları! Ok tuşlarını kullanarak listeyi kaydırın! Ayrılmadan ve PID'yi not etmeden bir işlemi sonlandır! Birden fazla işlemi işaretleyin ve hepsini öldürün!
Tüm özellikler arasında, manpage bir işlemi takipF etmek için basabileceğinizi söylüyor .
Gerçekten denemelisin htop
. top
İlk kullanmamdan sonra bir daha hiç başlamadım htop
.
Tek bir işlem göster:
htop -p PID
top
ayrıca renkleri var. Basın z
.
top
renkleri var! Çok kötü, renkleri htop
(özellikle diğer kullanıcıların işlemlerini ve programın ismini vurgulayan) soluyor.
htop -p PID
aynı zamanda, @Michael Mrozek'in verdiği örnek gibi çalışacak.
Aşağıdakiler bir çeşit geçmiş grafiğini ele almaktadır . Python psrecord
paketi tam olarak bunu yapar.
pip install psrecord # local user install
sudo apt-get install python-matplotlib python-tk # for plotting; or via pip
Tek işlem için, aşağıdakiler (durur Ctrl+C):
psrecord $(pgrep proc-name1) --interval 1 --plot plot1.png
Birkaç işlem için, aşağıdaki komut dosyası çizelgeleri senkronize etmeye yardımcı olur:
#!/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'
Paket RSS okunur örnekleme (artı bazı Python özel seçenekler) sağlar. Ayrıca, çocuk süreçleriyle birlikte süreci de kaydedebilir (bkz mprof --help
).
pip install memory_profiler
mprof run /path/to/executable
mprof plot
Varsayılan olarak bu python-tk
, ihraç edilebilen bir Tkinter tabanlı ( gerekebilir) grafik gezginini açar :
Basit bir kereye mahsus olmak üzere yapılan bir test için fazlaca gözükebilir, ancak birkaç günlük hata ayıklama gibi bir şey için, kesinlikle makul. Kullanışlı bir hepsi bir arada raintank/graphite-stack
(Grafana'nın yazarlarından) görüntü psutil
ve statsd
müşteri. procmon.py
bir uygulama sağlar.
$ docker run --rm -p 8080:3000 -p 8125:8125/udp raintank/graphite-stack
Sonra başka bir terminalde, hedef işlemi başlattıktan sonra:
$ sudo apt-get install python-statsd python-psutil # or via pip
$ python procmon.py -s localhost -f chromium -r 'chromium.*'
Sonra Grafana'yı http: // localhost: 8080 adresinde açmak , as kimlik doğrulaması yapmak admin:admin
, veri kaynağını ayarlamak https: // localhost , şunun gibi bir grafik çizebilirsiniz :
Python betiği, metrikleri Statsd'e göndermek yerine metrikleri doğrudan Grafit'e göndermek için telegraf
(ve procstat
giriş eklentisi) kullanılabilir.
Minimal telegraf
yapılandırma şöyle gözüküyor:
[agent]
interval = "1s"
[[outputs.graphite]]
servers = ["localhost:2003"]
prefix = "testprfx"
[[inputs.procstat]]
pid_file = "/path/to/file/with.pid"
Ardından satır koş telegraf --config minconf.conf
. Grafana kısmı, metrik adları hariç aynıdır.
sysdig
(Debian ve Ubuntu reposlarında mevcut) sysdig-inspected UI ile CPU kullanımı ve RSS ile birlikte son derece ince ayrıntılı bilgiler sağlayarak çok umut verici görünüyor, ancak ne yazık ki UI bunları sağlayamıyor ve olaydaki işlemleri sysdig
filtreleyemiyor procinfo
. yazma zamanı. Yine de, bu, özel bir keskiyle ( sysdig
Lua'da yazılmış bir uzantı) mümkün olmalıdır .
pgrep --help
Kurtarma için EralpB . En az var --newest
ve --oldest
.
Ctrl+C
için, psrecord işleminde, bir arsa kaydetmeden sonlandırılır, test edilen işlemi sonlandırmanız gerekir.
Bu bilgiyi bir komut dosyasında kullanmak için şunu yapabilirsiniz:
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
gibi kullanmak: calcPercCpu.sh 1234
nerede 1234 pid
Belirtilen $ nPid için, ölçecek ortalama 1 saniyelik bir bütün olarak işlemci kullanım 10 anlık (0.1s her gecikme * kaç_kere = 10); Bu, şu anda olanların iyi ve hızlı bir şekilde doğru sonucunu veriyor.
Değişkenleri ihtiyaçlarınıza göre ayarlayın.
$nPercCpu
) almak için 10 işlemi çağırmanızdan hoşlanmıyorum : shell, top, grep, sed, cut ... bc. Bunların hepsi değilse, çoğu, örneğin 1 Sed veya Awk betiğiyle birleştirilebilir.
top
'nin çıkışı olan bir ortalama fazla $delay
. Krş CPU kullanımı nasıl hesaplanır
Normalde aşağıdaki ikisini kullanıyorum:
HP kaliper : İşlemleri izlemek için çok iyi bir araçtır, ayrıca çağrı grafiğini ve diğer düşük seviye bilgilerini kontrol edebilirsiniz. Ancak, yalnızca kişisel kullanım için ücretsiz olduğunu lütfen unutmayın.
daemontools : UNIX servislerini yönetmek için bir araç koleksiyonu
top
Ve awk
birini kullanarak kolayca oluşturabilir; örneğin daha sonra herhangi bir istatistik ve grafik aracına beslenebilecek virgülle ayrılmış% CPU ( $9
) +% MEM ( $10
) kullanımı günlüğü .
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() }'
Çıkış gibi olacak
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
Bu, büyük için iyi sonuçlar vermez $delay
, çünkü yazdırılan zaman damgası çıktıların $delay
nasıl top
çalıştığından dolayı gerisinde kalmıştır . Çok fazla ayrıntıya girmeden, bunun için 1 basit yol, aşağıdakileri sağlayan süreyi kaydetmektir top
:
top -b -d $delay -p $pid | awk -v OFS="," '$1=="top"{ time=$3 }
$1+0>0 { print time,$1,$NF,$9,$10; fflush() }'
Ardından zaman damgası doğrudur, ancak çıkış yine de gecikecektir $delay
.
İşlem adını biliyorsanız, kullanabilirsiniz
top -p $(pidof <process_name>)
Top başına işlem (-p) seçeneği ya da ilgili seçeneklerin bulunmadığı kesik bir Linux dağıtımınız varsa, işlem başına CPU kullanım bilgilerini almak için işlem adınız için en üst komutun çıktısını çözümleyebilirsiniz.
while true; do top -bn1 | awk '/your_process_name/ {print $8}' ; sleep 1; done
8, gömülü Linux dağıtımımdaki üst komutun çıktısında işlem başına CPU kullanımını temsil ediyor
Yorum yapmak için yeterli itibar yok, ancak psrecord için doğrudan Python'da programlı bir şekilde de arayabilirsiniz:
from psrecord.main import monitor
monitor(<pid number>, logfile = "./test.log", plot="./fig.png", include_children=True)
Belirli bir işlemin belirli bir süresi için ortalamalara ihtiyacınız varsa, top toplayıcı -c seçeneğini deneyin:
top -c a -pid PID
Mac 10.8.5 için en üstte bulunan "-c a".
Scientific Linux için, seçenek etkileşimli olarak ayarlanabilen -S'dir.
top
bu özelliği sağladığı hakkında daha fazla ayrıntı eklemek isteyeceksiniz . Fedora 19'daki sürümüm yok. Ubuntu 13.04'te de aynı.
Buraya biraz geç kaldım ancak komut satırı numaramı yalnızca varsayılanı kullanarak paylaşacağım 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
Bunu bir astar olarak kullanıyorum. Burada ilk satır komutu ateşler ve PID'yi değişkende saklar. Ardından ps, geçen süreyi, kullanılan yüzde CPU'yu, yüzde belleği ve RSS belleğini yazdırır. Diğer alanları da ekleyebilirsiniz.
İşlem biter bitmez, ps
komut "başarı" ve "while
döngü sona erer.
Profil yapmak istediğiniz PID zaten çalışıyorsa, ilk satırı yok sayabilirsiniz. Sadece istediğiniz kimliği değişkene yerleştirin.
Bunun gibi bir çıktı alacaksınız:
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
....