man ps
w NOTES
dziale.
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%.
I chyba wiesz, ale możesz także:
top -p <PID>
Edycja : co do komentarza do innej odpowiedzi;
„ Hmm tak, zastanawiam się, jak to uzyskać (natychmiastowy procent procesora) z ps ”
Krótka odpowiedź: nie możesz.
Dlaczego tak jest
To tak, jakby poprosić kogoś o obliczenie prędkości samochodu na podstawie zdjęcia.
Chociaż top
jest narzędziem do monitorowania, ps
jest narzędziem do tworzenia migawek. Pomyśl o tym w ten sposób: w dowolnym momencie proces albo korzysta z procesora, albo nie. Tak więc masz dokładnie 0% lub 100% obciążenia w tym właśnie momencie.
Dawanie: Jeśli ps
powinno dać natychmiastowe użycie procesora , byłoby to 0% lub 100%.
top
z drugiej strony utrzymuj numery odpytywania i obliczaj obciążenie w czasie.
ps
mógł mieć aktualne użycie - ale wymagałoby to wielokrotnego odczytu danych i uśpienia między kolejnymi odczytami. Nie ma
Obliczanie dla ps% cpu
ps
oblicza użycie procesora w następujący sposób:
uptime = całkowity czas działania systemu.
ps_time = czas rozpoczęcia procesu mierzony w sekundach od rozruchu.
pu_time = całkowity czas proces wykorzystuje procesor.
;; Trwa proces Seconds:
sekundy = czas pracy - ps_time
;; Stosowanie:
cpu_usage = pu_time * 1000 / sekundy
print: cpu_usage / 10 "." cpu_usage% 10
Przykład:
czas pracy = 344,545
ps_time = 322,462
pu_time = 3,383
sekund = 344545 - 322 462 = 22 083
cpu_usage = 3383 * 1000/22 083 = 153
wydruk: 153/10 "." 153% 10 => 15,3
Tak więc wydrukowana liczba to: czas, w którym proces zużywał procesor podczas jego życia. Jak w powyższym przykładzie. Zrobił to w 15,3% swojego życia. W 84,7% przypadków nie powodowało to błędów procesora.
Odzyskiwanie danych
ps
, a także top
wykorzystuje dane z plików przechowywanych w /proc/
systemie pseudo-plikowym z informacjami o procesie .
Niektóre pliki główne /proc/
mają różne informacje o ogólnym stanie systemu. Ponadto każdy proces ma własny podfolder, w /proc/<PID>/
którym przechowywane są dane specyficzne dla procesu. Na przykład proces z twojego pytania miał folder w /proc/3038/
.
Podczas ps
obliczania zużycia procesora wykorzystuje dwa pliki:
/ proc / uptime Czas pracy systemu (sekundy) i ilość czasu spędzonego na bezczynności (sekundy).
/ proc / [PID] / stat Informacje o statusie procesu.
- Z
uptime
niego korzysta pierwsza wartość ( czas działania ).
- Z
[PID]/stat
wykorzystuje następujące:
# Nazwa Opis
14 godzin czasu procesora spędzonego w kodzie użytkownika, mierzonego w jiffies
15 godzin czasu procesora spędzonego w kodzie jądra, mierzonych w jiffies
16 czasu pracy procesora spędzonego w kodzie użytkownika, w tym czas od dzieci
17 cstime czasu procesora spędzonego w kodzie jądra, w tym czas od dzieci
22 czas rozpoczęcia Czas rozpoczęcia procesu, mierzony w jiffies
Jiffie jest zegar kleszczy. Dodatkowo wykorzystuje różne metody, tj., sysconf(_SC_CLK_TCK)
Aby uzyskać Hertz systemu (liczbę tyknięć na sekundę) - ostatecznie wykorzystując 100 jako rezerwę po wyczerpaniu innych opcji.
Jeśli więc utime
jest 1234, a Hertz to 100, to:
seconds = utime / Hertz = 1234 / 100 = 12.34
Rzeczywiste obliczenia są wykonywane przez:
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
Przykład (Dane wyjściowe z niestandardowego skryptu Bash):
$ ./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%
Obliczanie „bieżącego” obciążenia za pomocą ps
To jest (nieco?) Podejrzane przedsięwzięcie, ale OK. Spróbujmy.
Można wykorzystać podane czasy ps
i na tej podstawie obliczyć zużycie procesora. Myślenie o tym może być raczej przydatne, z pewnymi ograniczeniami.
Może to być przydatne do obliczania zużycia procesora w dłuższym okresie. Tzn. Chcesz monitorować średnie obciążenie procesora plugin-container
w Firefoksie podczas wykonywania niektórych zadań związanych z Firefoksem.
Korzystając z danych wyjściowych z:
$ 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.
Używam etime
na etimes
tej próbce, na obliczeniach, tylko być nieco bardziej wyraźne. Dodaję też% procesora dla „zabawy”. W np. Skrypcie bash oczywiście można by użyć etimes
- lub lepiej czytać z /proc/<PID>/
itp.
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
Proces wykorzystywał procesor 38% czasu w tym okresie.
Spójrz na kod
Jeśli chcesz wiedzieć, jak ps
to zrobić i znać trochę C, zrób to (wygląda na to, że uruchamiasz Gnome Debain deriavnt) - miłe podejście do kodu w odniesieniu do komentarzy itp .:
apt-get source procps
cd procps*/ps
vim HACKING
top
i ciągłym monitorowaniem - lub przyciągać przez opóźnienie zwane "ps
" bieżącym obciążeniem procesora.źródło
ps
top -p 3343 -n1 | awk '/ R /{print $10}'
awk
: dlapid
lepiej działało, jak wtop -p 3343 -n1 | awk '/ 3343 /{print $10}'
top -p $PID -n1 | awk '{if (NR ==8) print $9 }'