Linux'ta tek bir işlemin CPU ve bellek kullanımını elde etmek istiyorum - PID'yi biliyorum. Umarım her saniye alıp 'watch' komutunu kullanarak bir CSV'ye yazabilirim. Bu bilgiyi Linux komut satırından almak için hangi komutu kullanabilirim?
Linux'ta tek bir işlemin CPU ve bellek kullanımını elde etmek istiyorum - PID'yi biliyorum. Umarım her saniye alıp 'watch' komutunu kullanarak bir CSV'ye yazabilirim. Bu bilgiyi Linux komut satırından almak için hangi komutu kullanabilirim?
Yanıtlar:
ps -p <pid> -o %cpu,%mem,cmd
("Cmd" yi bırakabilirsiniz ancak hata ayıklamada yardımcı olabilir).
Bunun işlem sırasında işlemin ortalama CPU kullanımını verdiğini unutmayın.
| tail -n +2
ps
). Bu tam zamanında CPU kullanımı için gerçek değildir . top
Örneğin, gösterilenden çok farklı olabilir .
ps -e -o pcpu,args
işlemin ömrü boyunca cpu ortalamasını gösterecektir, bu uzun süren bir süreçse istediğiniz şey değildir
Kafenin cevabının bir çeşidi :
top -p <pid>
Bu, CPU kullanımını otomatik olarak yeniler, böylece izleme için iyidir.
pgrep
:top -p $(pgrep process_name)
Sonuçları kullanarak işlemin adına göre alabilirsiniz
ps -C chrome -o %cpu,%mem,cmd
-C
seçenek 's pid bilmeden işlem adını kullanmasını sağlar.
pid
sadece çalışmalıdır. ps -C chrome -o pid,%cpu,%mem,cmd
Pidstat kullanın (sistemden - Bkz. Bağlantı ).
örneğin bu iki işlem kimliğini (12345 ve 11223) her 5 saniyede bir izlemek için
$ pidstat -h -r -u -v -p 12345,11223 5
pidstat
bunun harika bir komut olduğunu ve komut dosyası oluşturmak için de kullanışlı olduğunu belirttiğiniz için teşekkürler !
pidstat
Ayrıca güzel bir ortalama verir. daha zarif bir yol bulamadım sadece bir utançpidstat -u 1 10 | grep ^Average | sort -r -n -b -k 8,8
ps
komutu (kullanmamalı):
top
komut (kullanmalı):
top
CPU kullanımını gerçek zamanlı olarak almak için kullanın (geçerli kısa aralık):
top -b -n 2 -d 0.2 -p 6962 | tail -1 | awk '{print $9}'
gibi yankılanacak: 78.6
-b
: Toplu modu-n 2
: Yineleme sayısı, şunu kullanın, 2
çünkü: İlk çalıştırdığınızda, karşılaştırılacak önceki bir örneği yoktur, bu nedenle bu başlangıç değerleri önyüklemeden sonraki yüzdelerdir.-d 0.2
: Gecikme süresi (saniye olarak, burada 200ms)-p 6962
: Monitor-PID'lertail -1
: son sıraawk '{print $9}'
: 9. sütun (işlemci kullanım numarası)Bir program başlatın ve izleyin
Bu form, bir yürütülebilir dosyayı kolayca karşılaştırmak istiyorsanız kullanışlıdır:
topp() (
$* &>/dev/null &
pid="$!"
trap ':' INT
echo 'CPU MEM'
while sleep 1; do ps --no-headers -o '%cpu,%mem' -p "$pid"; done
kill "$pid"
)
topp ./myprog arg1 arg2
Şimdi Ctrl + C tuşlarına bastığınızda programdan çıkar ve izlemeyi durdurur. Örnek çıktı:
CPU MEM
20.0 1.3
35.0 1.3
40.0 1.3
İlgili: /unix/554/how-to-monitor-cpu-memory-usage-of-a-single-process
Ubuntu 16.04'te test edildi.
İstediğiniz pid'i kullanabilir top -b
ve silebilirsiniz ( -b
üst kısım toplu modda çalışır) veya ayrıca -p
bayrağı kullanabilir ve grep kullanmadan pid'i belirtebilirsiniz.
Yukarıdaki caf cevabında yorumlandığı gibi, ps ve bazı durumlarda pidstat size pCPU'nun ömür boyu ortalamasını verecektir. Daha doğru sonuçlar almak için üst kısmı kullanın. Bir kez üstte koşmanız gerekiyorsa koşabilirsiniz:
top -b -n 1 -p <PID>
veya yalnızca veri ve başlık işlemek için:
top -b -n 1 -p <PID> | tail -3 | head -2
üstbilgisiz:
top -b -n 1 -p <PID> | tail -2 | head -1
Aşağıdaki komut, belirli bir işlem için her 40 saniyede bir ortalama CPU ve bellek kullanımı alır (pid)
pidstat 40 -ru -p <pid>
Benim durumum için çıktı (CPU kullanımı için ilk iki satır, bellek için ikinci iki satır):
02:15:07 PM PID %usr %system %guest %CPU CPU Command
02:15:47 PM 24563 0.65 0.07 0.00 0.73 3 java
02:15:07 PM PID minflt/s majflt/s VSZ RSS %MEM Command
02:15:47 PM 24563 6.95 0.00 13047972 2123268 6.52 java
Yalnızca uygulamanızın bellek kullanımını elde etmek için (kullandığı paylaşılan kitaplıkların aksine, Linux smaps arayüzünü kullanmanız gerekir). Bu cevap bunu iyi açıklıyor .
ps aux|awk '{print $2,$3,$4}'|grep PID
burada birinci sütun PID, ikinci sütun CPU kullanımı, üçüncü sütun bellek kullanımıdır.
Buradaki yanıtların tümü yalnızca PID için bellek yüzdesini gösterir.
Tüm apache işlemleri için KB'de rss bellek kullanımını nasıl alacağınıza bir örnek, sadece belirli bir PID'yi izlemek istiyorsanız "grep apache" yerine "grep PID" yazın:
watch -n5 "ps aux -y | grep apache | awk '{print \$2,\$6}'"
Bu yazdırır:
Every 5.0s: ps aux -y | grep apache | awk '{print $2,$6}'
Thu Jan 25 15:44:13 2018
12588 9328
12589 8700
12590 9392
12591 9340
12592 8700
12811 15200
15453 9340
15693 3800
15694 2352
15695 1352
15697 948
22896 9360
% CPU ile:
watch -n5 "ps aux -y | grep apache | awk '{print \$2,\$3,\$6}'"
Çıktı:
Every 5.0s: ps aux -y | grep apache | awk '{print $2,$3,$6}'
Thu Jan 25 15:46:00 2018
12588 0.0 9328
12589 0.0 8700
12590 0.0 9392
12591 0.0 9340
12592 0.0 8700
12811 0.0 15200
15453 0.0 9340
15778 0.0 3800
15779 0.0 2352
15780 0.0 1348
15782 0.0 948
22896 0.0 9360
Bu, bir veya daha fazla programı gerçek zamanlı olarak izlemek ve aynı zamanda başka bir aracın çıktısını izlemek için güzel bir numaradır:
watch "top -bn1 -p$(pidof foo),$(pidof bar); tool"
Yukarıdaki liste en üst işlemci ve bellek tüketen süreci listeliyor
ps axo %cpu,%mem,command | sort -nr | head
@ Caf'ın cevabına dayanarak, bu benim için iyi çalışıyor.
Verilen PID için ortalamayı hesapla:
measure.sh
times=100
total=0
for i in $(seq 1 $times)
do
OUTPUT=$(top -b -n 1 -d 0.1 -p $1 | tail -1 | awk '{print $9}')
echo -n "$i time: ${OUTPUT}"\\r
total=`echo "$total + $OUTPUT" | bc -l`
done
#echo "Average: $total / $times" | bc
average=`echo "scale=2; $total / $times" | bc`
echo "Average: $average"
Kullanımı:
# send PID as argument
sh measure.sh 3282
Linux'ta tek bir işlemin CPU ve bellek kullanımı veya aşağıdaki komutu kullanarak en iyi 10 cpu kullanılan işlemi alabilirsiniz
ps -aux --sort -pcpu | kafa -n 11