man ps
trong NOTES
phần.
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%.
Và, đoán bạn biết, nhưng bạn cũng có thể làm:
top -p <PID>
Chỉnh sửa : như nhận xét của bạn về câu trả lời khác;
" Hmm yeah tôi tự hỏi làm thế nào để có được điều đó (phần trăm CPU tức thời) từ ps "
Câu trả lời ngắn gọn: bạn không thể.
Tại sao nó như vậy?
Nó giống như yêu cầu ai đó tính tốc độ của một chiếc xe hơi từ một bức tranh.
Trong khi top
là một công cụ giám sát, ps
là một công cụ chụp nhanh. Hãy nghĩ về nó như thế này: Tại bất kỳ thời điểm nào, một quá trình đều sử dụng CPU hoặc không. Do đó, bạn có tải 0% hoặc 100% trong thời điểm chính xác đó.
Cho đi: Nếu ps
nên cho sử dụng CPU ngay lập tức, nó sẽ là 0% hoặc 100%.
top
mặt khác giữ số lượng bỏ phiếu và tính tải theo thời gian.
ps
có thể đã đưa ra cách sử dụng hiện tại - nhưng điều đó sẽ yêu cầu nó đọc dữ liệu nhiều lần và ngủ giữa mỗi lần đọc. Nó không.
Tính toán cho ps% cpu
ps
tính toán mức sử dụng CPU theo cách sau:
uptime = tổng thời gian hệ thống đã được chạy.
ps_time = thời gian bắt đầu quá trình được tính bằng giây từ khi khởi động.
pu_time = quá trình tổng thời gian đã sử dụng CPU.
;; Quá trình giây đã được chạy:
giây = thời gian hoạt động - ps_time
;; Sử dụng:
cpu_usage = pu_time * 1000 / giây
in: cpu_usage / 10 "." cpu_usage% 10
Thí dụ:
thời gian hoạt động = 344,545
ps_time = 322.462
pu_time = 3,383
giây = 344,545 - 322,462 = 22,083
cpu_usage = 3,383 * 1.000 / 22,083 = 153
in: 153/10 "." 153% 10 => 15.3
Vì vậy, số được in là: thời gian quá trình sử dụng CPU trong suốt vòng đời của nó. Như trong ví dụ trên. Nó đã làm như vậy trong 15,3% của cuộc đời. Trong 84,7% thời gian nó không được xử lý trên CPU.
Phục hồi dữ liệu
ps
, cũng như top
, sử dụng dữ liệu từ các tệp được lưu trữ bên dưới /proc/
- hoặc hệ thống tệp giả thông tin quy trình .
Bạn có một số tệp trong thư mục gốc /proc/
có thông tin khác nhau về trạng thái chung của hệ thống. Ngoài ra, mỗi tiến trình có thư mục con riêng /proc/<PID>/
, nơi lưu trữ dữ liệu cụ thể của quá trình. Vì vậy, ví dụ quá trình từ câu hỏi của bạn có một thư mục tại /proc/3038/
.
Khi ps
tính toán mức sử dụng CPU, nó sử dụng hai tệp:
/ Proc / uptime Thời gian hoạt động của hệ thống (giây) và lượng thời gian dành cho quá trình nhàn rỗi (giây).
/ Proc / [PID] / stat Thông tin trạng thái về quy trình.
- Từ
uptime
đó sử dụng giá trị đầu tiên ( thời gian hoạt động ).
- Từ
[PID]/stat
đó sử dụng như sau:
# Tên Mô tả
14 thời gian CPU sử dụng trong mã người dùng, được đo bằng jiffies
Thời gian CPU 15 giây dành cho mã hạt nhân, được đo bằng jiffies
16 thời gian CPU đáng tin cậy dành cho mã người dùng, bao gồm cả thời gian từ trẻ em
17 thời gian CPU cstime dành cho mã hạt nhân, bao gồm cả thời gian từ trẻ em
22 thời gian bắt đầu Thời gian khi quá trình bắt đầu, được đo bằng jiffies
Một jiffie là đồng hồ tích tắc. Vì vậy, ngoài ra, nó còn sử dụng nhiều phương pháp khác nhau, ví dụ sysconf(_SC_CLK_TCK)
, để lấy Hertz của hệ thống (số lần đánh dấu mỗi giây) - cuối cùng sử dụng 100 làm dự phòng sau khi làm cạn kiệt các tùy chọn khác.
Vậy nếu utime
là 1234 và Hertz là 100 thì:
seconds = utime / Hertz = 1234 / 100 = 12.34
Tính toán thực tế được thực hiện bởi:
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
Ví dụ (Đầu ra từ tập lệnh Bash tùy chỉnh):
$ ./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%
Tính toán tải "hiện tại" với ps
Đây là một nỗ lực mờ ám (bit?) Nhưng OK. Hãy đi đi.
Người ta có thể sử dụng thời gian được cung cấp bởi ps
và tính toán mức sử dụng CPU từ việc này. Khi nghĩ về nó, nó thực sự có thể khá hữu ích, với một số hạn chế.
Điều này có thể hữu ích để tính toán việc sử dụng CPU trong một khoảng thời gian dài hơn. Tức là bạn muốn theo dõi tải CPU trung bình của plugin-container
Firefox trong khi thực hiện một số tác vụ liên quan đến Firefox.
Bằng cách sử dụng đầu ra từ:
$ 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.
Tôi sử dụng etime
trên etimes
trong mẫu này, trên các tính toán, chỉ là một chút rõ ràng hơn. Ngoài ra tôi thêm% cpu cho "vui vẻ". Trong ví dụ, một tập lệnh bash rõ ràng người ta sẽ sử dụng etimes
- hoặc đọc tốt hơn từ /proc/<PID>/
v.v.
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
Quá trình đã sử dụng CPU 38% thời gian trong giai đoạn này.
Nhìn vào mã
Nếu bạn muốn biết làm thế nào ps
và biết một chút C, hãy làm (có vẻ như bạn chạy Gnome Debain deriavnt) - thái độ tốt đẹp trong mã liên quan đến ý kiến, v.v .:
apt-get source procps
cd procps*/ps
vim HACKING
top
và theo dõi liên tục - hoặc chụp nhanh bằng cách trì hoãn aka "ps
" với tải CPU hiện tại.