man ps
di NOTES
bagian.
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%.
Dan, tebak Anda tahu, tetapi Anda juga bisa melakukannya:
top -p <PID>
Sunting : untuk komentar Anda tentang jawaban lain;
" Hmm ya aku ingin tahu bagaimana cara mendapatkan (persentase CPU instan) dari ps "
Jawaban singkat: Anda tidak bisa.
Kenapa gitu?
Itu seperti meminta seseorang untuk menghitung kecepatan mobil dari sebuah gambar.
Sedangkan top
alat pemantauan, ps
adalah alat snapshot. Pikirkan seperti ini: Pada saat tertentu suatu proses baik menggunakan CPU atau tidak. Dengan demikian Anda memiliki beban 0% atau 100% pada saat yang tepat.
Memberi: Jika ps
harus memberikan penggunaan CPU instan itu akan menjadi 0% atau 100%.
top
di sisi lain tetap nomor polling dan hitung beban dari waktu ke waktu.
ps
bisa memberikan penggunaan saat ini - tetapi itu akan mengharuskannya untuk membaca data beberapa kali dan tidur di antara masing-masing membaca. Tidak.
Perhitungan untuk ps% cpu
ps
menghitung penggunaan CPU dengan cara berikut:
uptime = total waktu sistem telah berjalan.
ps_time = proses waktu mulai diukur dalam detik dari boot.
pu_time = total waktu proses telah menggunakan CPU.
;; Proses detik telah berjalan:
detik = waktu aktif - ps_time
;; Pemakaian:
cpu_usage = pu_time * 1000 / detik
cetak: cpu_usage / 10 "." cpu_usage% 10
Contoh:
uptime = 344.545
ps_time = 322.462
pu_time = 3,383
detik = 344.545 - 322.462 = 22.083
cpu_usage = 3.383 * 1.000 / 22.083 = 153
cetak: 153/10 "." 153% 10 => 15.3
Jadi nomor yang dicetak adalah: waktu proses telah menggunakan CPU selama masa pakainya. Seperti pada contoh di atas. Itu telah melakukannya dalam 15,3% dari masa hidupnya. Dalam 84,7% dari waktu itu belum bug di CPU.
Penerimaan data
ps
, serta top
, menggunakan data dari file yang disimpan di bawah /proc/
- atau sistem pseudo-file informasi proses .
Anda memiliki beberapa file di root /proc/
yang memiliki berbagai informasi tentang keadaan keseluruhan sistem. Selain itu setiap proses memiliki sub folder sendiri di /proc/<PID>/
mana proses data spesifik disimpan. Jadi, misalnya proses dari pertanyaan Anda memiliki folder di /proc/3038/
.
Saat ps
menghitung penggunaan CPU, ia menggunakan dua file:
/ proc / uptime Uptime sistem (detik), dan jumlah waktu yang dihabiskan dalam proses idle (detik).
/ proc / [PID] / status stat informasi tentang proses.
- Dari
uptime
itu menggunakan nilai pertama ( uptime ).
- Dari
[PID]/stat
itu menggunakan yang berikut:
# Deskripsi Nama
14 waktu CPU dihabiskan dalam kode pengguna, diukur dalam jiffies
15 stime waktu CPU dihabiskan dalam kode kernel, diukur dalam jiffies
16 cutime waktu CPU dihabiskan dalam kode pengguna, termasuk waktu dari anak-anak
17 waktu cstime CPU dihabiskan dalam kode kernel, termasuk waktu dari anak-anak
22 waktu mulai Waktu ketika proses dimulai, diukur dalam jiffies
Sebuah jiffie adalah jam tick. Jadi selain itu menggunakan berbagai metode, yaitu., sysconf(_SC_CLK_TCK)
Untuk mendapatkan sistem Hertz (jumlah kutu per detik) - akhirnya menggunakan 100 sebagai mundur setelah melelahkan opsi lain.
Jadi jika utime
1234 dan Hertz 100 maka:
seconds = utime / Hertz = 1234 / 100 = 12.34
Perhitungan aktual dilakukan oleh:
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
Contoh (Output dari skrip Bash khusus):
$ ./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%
Menghitung beban "saat ini" dengan ps
Ini adalah usaha (agak?) Teduh tapi OK. Mari kita mulai.
Satu dapat menggunakan waktu yang disediakan oleh ps
dan menghitung penggunaan CPU dari ini. Ketika memikirkannya, itu sebenarnya bisa berguna, dengan beberapa batasan.
Ini bisa berguna untuk menghitung penggunaan CPU dalam periode yang lebih lama. Yakni Anda ingin memonitor beban CPU rata-rata plugin-container
di Firefox saat melakukan beberapa tugas yang berhubungan dengan Firefox.
Dengan menggunakan output dari:
$ 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.
Saya menggunakan etime
lebih etimes
dalam sampel ini, pada perhitungan, hanya untuk menjadi sedikit lebih jelas. Saya juga menambahkan% cpu untuk "kesenangan". Dalam contoh skrip bash yang jelas akan digunakan etimes
- atau lebih baik dibaca dari yang /proc/<PID>/
lain.
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
Proses menggunakan CPU 38% dari waktu selama periode ini.
Lihatlah kodenya
Jika Anda ingin tahu bagaimana ps
melakukannya, dan tahu sedikit C, lakukan (sepertinya Anda menjalankan Gnome Debain deriavnt) - sikap yang baik dalam kode mengenai komentar dll .:
apt-get source procps
cd procps*/ps
vim HACKING
top
, dan pemantauan terus menerus - atau jepret alias "ps
" dengan beban CPU saat ini.sumber
ps
top -p 3343 -n1 | awk '/ R /{print $10}'
awk
: untuk yangpid
bekerja lebih baik, seperti dalamtop -p 3343 -n1 | awk '/ 3343 /{print $10}'
top -p $PID -n1 | awk '{if (NR ==8) print $9 }'