man ps
в NOTES
розд.
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%.
І, здогадайтесь, ви знаєте, але ви також можете зробити:
top -p <PID>
Редагувати : щодо Вашого коментаря до іншої відповіді;
" Гм, так, мені цікаво, як отримати це (миттєвий відсоток процесора) від ps "
Коротка відповідь: не можна.
Чому так?
Це як би попросити когось обчислити швидкість автомобіля з картинки.
Хоча top
це інструмент моніторингу, ps
це інструмент для знімків. Подумайте про це так: У будь-який момент процес або використовує процесор, або ні. Таким чином, у вас є або 0%, або 100% навантаження в той самий момент.
Віддає: Якщо ps
необхідно дати миттєву завантаження процесора він буде або 0% або 100%.
top
з іншого боку, продовжуйте число дільниць і обчислюйте навантаження з часом.
ps
могло б використовувати поточне використання - але це вимагатиме від нього багаторазового читання даних і переходу між кожним прочитаним. Це не так.
Розрахунок для ps% cpu
ps
обчислює використання процесора таким чином:
uptime = загальна система часу працює.
ps_time = час початку процесу вимірюється в секундах від завантаження.
pu_time = загальний час, який використовується процесором.
;; Запуск секунди:
секунди = час роботи - ps_time
;; Використання:
cpu_usage = pu_time * 1000 / сек
друк: cpu_usage / 10 "." cpu_usage% 10
Приклад:
тривалість роботи = 344,545
ps_time = 322 462
pu_time = 3 383
секунди = 344,545 - 322 462 = 22 083
cpu_usage = 3,383 * 1000 / 22,083 = 153
друк: 153/10 "." 153% 10 => 15.3
Отже, кількість надрукованих: час, який процес використовував процесор протягом свого життя. Як у прикладі вище. Це зробили за 15,3% свого життя. У 84,7% випадків він не надавав помилок на процесорі.
Пошук даних
ps
, а також top
використовує дані з файлів, що зберігаються під /proc/
- або псевдофайловою системою інформації про процес .
У вас є кілька файлів у корені, /proc/
які містять різну інформацію про загальний стан системи. Крім того, кожен процес має свою підпапку, /proc/<PID>/
де зберігаються конкретні дані для процесу. Так, наприклад, у процесі вашого запитання була папка в /proc/3038/
.
При ps
обчисленні використання процесора він використовує два файли:
/ proc / uptime Продовження роботи системи (секунди) та кількість часу, витраченого в режимі очікування (секунди).
/ proc / [PID] / stat Інформація про стан процесу.
- З
uptime
нього використовується перше значення ( uptime ).
- З
[PID]/stat
нього використовується наступне:
# Ім'я Опис
14 часу процесорного часу, проведеного в коді користувача, вимірюється в "джиффах"
Час процесора 15 разів, витрачений у коді ядра, виміряний в джиффах
16 скорочень процесорного часу, проведеного в коді користувача, включаючи час від дітей
Час процесора 17 часу, витраченого на код ядра, включаючи час від дітей
22 час початку Час, коли процес розпочався, вимірюється в міг
Jiffie це годинник тик. Окрім того, він використовує різні методи, тобто sysconf(_SC_CLK_TCK)
, щоб отримати Герц системи (кількість тиків в секунду) - в кінцевому рахунку, використовуючи 100 як запасний результат після вичерпання інших варіантів.
Отже, якщо utime
це 1234, а Герц - 100, то:
seconds = utime / Hertz = 1234 / 100 = 12.34
Фактичний розрахунок проводиться:
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
Приклад (вихід із спеціального сценарію 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%
Розрахунок "поточного" навантаження з ps
Це (трохи?) Тінисте починання, але гаразд. Давайте ходимо.
Можна використати час, передбачений ps
і обчислити використання цього процесора. Подумавши про це, це насправді може бути досить корисним, з деякими обмеженнями.
Це може бути корисно для розрахунку використання процесора протягом більш тривалого періоду. Тобто, ви хочете контролювати середнє завантаження процесора plugin-container
у Firefox, виконуючи деякі завдання, пов'язані з Firefox.
Використовуючи вихід із:
$ 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.
Я використовую etime
більш etimes
в цьому зразку, за розрахунками, тільки трохи більш ясно. Також я додаю% cpu для "веселощів". Тобто, bash-скрипт, очевидно, використовується etimes
- або краще читати з /proc/<PID>/
etc.
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
Процес використовував процесор 38% часу за цей період.
Подивіться на код
Якщо ви хочете дізнатися, як ps
це робиться, і знаєте трохи C, зробіть (схоже, ви запускаєте Gnome Debain deriavnt) - приємне ставлення до коду щодо коментарів тощо:
apt-get source procps
cd procps*/ps
vim HACKING
top
постійний моніторинг - або оснащення затримкою ака "ps
" з поточним завантаженням процесора.