man ps
içinde NOTES
bölüm.
CPU usage is currently expressed as the percentage of time spent running
during the entire lifetime of a process. This is not ideal, and it does not
conform to the standards that ps otherwise conforms to. CPU usage is
unlikely to add up to exactly 100%.
Ve bildiğini tahmin et, ama şunu da yapabilirsin:
top -p <PID>
Düzenleme : diğer cevaplar hakkındaki yorumunuz için;
" Hmm evet ps bunu nasıl alacağınızı merak ediyorum (anlık işlemci yüzdesi) "
Kısa cevap: yapamazsın.
Neden bu kadar?
Birinden bir resimdeki arabanın hızını hesaplamasını istemek gibi bir şey.
top
Bir izleme aracı iken , ps
anlık bir araçtır. Şöyle düşünün: Herhangi bir anda bir işlem CPU'yu kullanır ya da kullanmaz. Böylece, tam o anda% 0 veya% 100 yükünüz olur.
Verilmesi: Anında CPU kullanımıps
vermesi gerekiyorsa,% 0 veya% 100 olacaktır.
top
Öte yandan yoklama numaralarını saklayın ve zaman içindeki yükü hesaplayın.
ps
mevcut kullanım vermiş olabilirdi - ancak bu verileri birden çok kez okumasını ve her okuma arasında uyumasını gerektirir. Öyle değil.
Ps% cpu için hesaplama
ps
CPU kullanımını aşağıdaki şekilde hesaplar:
uptime = toplam süre sistemi çalışıyor.
ps_time = Başlamadan saniye cinsinden ölçülen işlem başlangıç zamanı.
pu_time = İşlemciyi kullanan toplam zaman işlemi.
;; Saniye işlemi devam ediyor:
saniye = çalışma süresi - ps_time
;; Kullanımı:
cpu_dosyası = pu_time * 1000 / saniye
print: cpu_dosyası / 10 "." cpu_Ürün% 10
Örnek:
çalışma süresi = 344,545
ps_time = 322,462
pu_time = 3,383
saniye = 344,545 - 322,462 = 22,083
cpu_dosyası = 3,383 * 1,000 / 22,083 = 153
baskı: 153/10 "." % 153 10 => 15,3
Bu nedenle yazdırılan sayı şudur: işlemin ömrü boyunca CPU'yu kullandığı süre. Yukarıdaki örnekte olduğu gibi. Bunu ömrünün% 15.3'ünde yaptı. Zamanının% 84,7'sinde işlemcide can sıkıcı değil.
Veri alımı
ps
bunun yanında top
, /proc/
- ya da işlem bilgisi sözde dosya sistemi altında depolanan dosyalardan gelen verileri kullanır .
/proc/
Sistemin genel durumu hakkında çeşitli bilgiler içeren kök dosyalarınız var. Ek olarak, her işlem, /proc/<PID>/
işleme özgü verilerin depolandığı kendi alt klasörüne sahiptir . Yani, örneğin sorunuzun işleminde bir klasör vardı /proc/3038/
.
Ne zaman ps
CPU kullanımını hesaplar bu iki dosya kullanır:
/ proc / uptime Sistemin çalışma süresi (saniye) ve boşta işlemde harcanan süre (saniye).
/ proc / [PID] / stat İşlemle ilgili durum bilgisi.
- Ondan
uptime
ilk değeri kullanır ( çalışma süresi ).
- Ondan
[PID]/stat
aşağıdakileri kullanır:
# İsim Açıklama
Kullanıcı kodunda harcanan 14 utime CPU süresi, jiffies ile ölçülür
Çekirdek kodunda harcanan 15 stime CPU süresi
Çocuklardan gelen zaman da dahil olmak üzere kullanıcı kodunda harcanan 16 cutime CPU zamanı
Çocuklardan gelen zaman da dahil olmak üzere, çekirdek kodunda harcanan 17 cstime CPU zamanı
22 starttime Sürecin başladığı zaman, juli olarak ölçülen zaman
Bir jiffie saat kenedir . Bu yüzden ek olarak, sysconf(_SC_CLK_TCK)
sistemin Hertzini (saniyedeki tik sayısını) almak için çeşitli yöntemler kullanır - sonuçta 100'ü diğer seçenekleri yorucu bıraktıktan sonra geri dönüş olarak kullanmak.
Öyleyse utime
1234 ve Hertz 100 ise:
seconds = utime / Hertz = 1234 / 100 = 12.34
Gerçek hesaplama şu şekilde yapılır:
total_time = utime + stime
IF include_dead_children
total_time = total_time + cutime + cstime
ENDIF
seconds = uptime - starttime / Hertz
pcpu = (total_time * 1000 / Hertz) / seconds
print: "%CPU" pcpu / 10 "." pcpu % 10
Örnek (Özel bir Bash komut dosyasından çıktı):
$ ./psw2 30894
System information
uptime : 353,512 seconds
idle : 0
Process information
PID : 30894
filename : plugin-containe
utime : 421,951 jiffies 4,219 seconds
stime : 63,334 jiffies 633 seconds
cutime : 0 jiffies 0 seconds
cstime : 1 jiffies 0 seconds
starttime : 32,246,240 jiffies 322,462 seconds
Process run time : 31,050
Process CPU time : 485,286 jiffies 4,852 seconds
CPU usage since birth: 15.6%
Ps ile "akım" yükünün hesaplanması
Bu (biraz?) Gölgeli bir çaba ama Tamam. Hadi gidelim.
Biri tarafından sağlanan zamanları kullanabilir ps
ve bundan CPU kullanımını hesaplayabilir. Bunu düşünürken bazı sınırlamalarla oldukça yararlı olabilir.
Bu, CPU kullanımını daha uzun bir süre boyunca hesaplamak için faydalı olabilir. Yani plugin-container
, Firefox ile ilgili bir görev yaparken, Firefox'taki ortalama CPU yükünü izlemek istediğinizi varsayalım.
Çıktısını kullanarak:
$ ps -p -o cputime, etimes
CODE HEADER DESCRIPTION
cputime TIME cumulative CPU time, "[DD-]hh:mm:ss" format. (alias time).
etime ELAPSED elapsed time since the process was started, [DD-]hh:]mm:ss.
etimes ELAPSED elapsed time since the process was started, in seconds.
Kullandığım etime
üzerinde etimes
hesaplamalara, sadece biraz daha net olmak gerekirse, bu örnekteki. Ayrıca "eğlence" için% cpu ekledim. Örneğin, bir bash betiğinde açıkça kullanılacaktır etimes
- veya daha iyisi /proc/<PID>/
vs.
Start:
$ ps -p 30894 -o %cpu,cputime,etime,etimes
%CPU TIME ELAPSED ELAPSED
5.9 00:13:55 03:53:56 14036
End:
%CPU TIME ELAPSED ELAPSED
6.2 00:14:45 03:56:07 14167
Calculate times:
13 * 60 + 55 = 835 (cputime this far)
3 * 3,600 + 53 * 60 + 56 = 14,036 (time running this far)
14 * 60 + 45 = 885 (cputime at end)
3 * 3,600 + 56 * 60 + 7 = 14,167 (time running at end)
Calculate percent load:
((885 - 835) / (14,167 - 14,036)) * 100 = 38
İşlem bu dönemde işlemlerin% 38'ini kullanıyordu.
Koduna bak
Nasıl ps
olduğunu bilmek ve biraz C bilmek istiyorsanız, yapın (Gnome Debain deriavnt'ı çalıştırdığınız gibi) - yorumlarla ilgili koddaki hoş tutum:
apt-get source procps
cd procps*/ps
vim HACKING
top
ve sürekli izlemeyle - veya gecikmeli aka "ps
" ile güncelleyerek güncelleme yapabilirim .