Отримати використання процесора та використання пам'яті одного процесу в Linux?


165

Я хочу отримати процесор і використання пам'яті для одного процесу в Linux - я знаю PID. Сподіваюсь, я можу отримати його щосекунди і записати його в CSV за допомогою команди "watch". Яку команду можна використовувати для отримання цієї інформації з командного рядка Linux?


11
Належить до SuperUser.
Річард

Чи можемо ми використовувати gdb для виклику getpid та top -p <that pid>?
mja

Відповіді:


226
ps -p <pid> -o %cpu,%mem,cmd

(Ви можете залишити "cmd", але це може бути корисним при налагодженні).

Зауважте, що це дає середнє використання процесора процесом за час його запуску.


6
Припущення полягає в тому, що якщо ви дбаєте про достатню кількість оперативної пам’яті для того, щоб її моніторити так, вона використовує значну кількість пам’яті, так що зайві пари мегабайт через спільне відображення не є проблемою.
caf

5
@Chaitanya: трубопровід| tail -n +2
caf

11
Або ви могли використовувати --noheader
гексаціанід

45
Майте на увазі, що% cpu "- це використовуваний час процесора, поділене на час запущеного процесу (співвідношення cputime / realtime), виражене у відсотках" (див. Сторінку сторінки ps). Це не справжнє саме час використання процесора. Це може також сильно відрізнятися від topпоказаних, наприклад.
xebeche

12
як сказано в Xebeche трохи вище, ps -e -o pcpu,argsпокаже середнє значення процесора протягом життя процесу, що, очевидно, не те, що ви хочете, якщо це тривалий процес
Alex F

65

Варіант відповіді кафе : top -p <pid>

Це автоматично оновлює використання процесора, тому воно добре для моніторингу.


2
Чудово працює з pgrep:top -p $(pgrep process_name)
Маттіас Браун

37

Результати можна отримати за назвою процесу, використовуючи

ps -C chrome -o %cpu,%mem,cmd

-Cопція дозволяє використовувати ім'я процесу , не знаючи , що це ідентифікатор процесу .


як включити також de pid? ihave спробував% pid $ PID pid, PID не пощастило
Арнольд Роа

@ArnoldRoa pidмає працювати лише ps -C chrome -o pid,%cpu,%mem,cmd
Мухаммед Таха

28

Використовуйте pidstat (від sysstat - Посилання на посилання ).

наприклад, контролювати ці два ідентифікатори процесу (12345 та 11223) кожні 5 секунд

$ pidstat -h -r -u -v -p 12345,11223 5

2
дякую, що вказали, pidstatщо це чудова команда, і зручно також для написання сценаріїв!
fduff

pidstatтакож дає хороший середній показник. просто соромно, що я не знайшов більш елегантного способуpidstat -u 1 10 | grep ^Average | sort -r -n -b -k 8,8
північний

24

ps команда (не слід використовувати):

top команда (повинна використовувати):

Використовуйте topдля використання процесора в режимі реального часу (поточний короткий інтервал):

top -b -n 2 -d 0.2 -p 6962 | tail -1 | awk '{print $9}'

лунатиме так: 78.6


Це найточніша відповідь, щоб отримати поточне використання процесора, а не середнє значення за весь час роботи процесу.
Тед Фенг

15

Запустіть програму і відстежте її

Ця форма корисна, якщо ви хочете легко порівняти виконуваний файл:

topp() (
  $* &>/dev/null &
  pid="$!"
  trap ':' INT
  echo 'CPU  MEM'
  while sleep 1; do ps --no-headers -o '%cpu,%mem' -p "$pid"; done
  kill "$pid"
)
topp ./myprog arg1 arg2

Тепер, коли ви натискаєте Ctrl + C, він закриває програму і припиняє моніторинг. Вибірка зразка:

CPU  MEM
20.0  1.3
35.0  1.3
40.0  1.3

Пов'язане: /unix/554/how-to-monitor-cpu-memory-usage-of-a-single-process

Тестовано на Ubuntu 16.04.


5

Ви можете використовувати top -bта викреслити потрібний pid (у -bверхній частині прапора працює у пакетному режимі), а також використовувати -pпрапор та вказати pid, не використовуючи grep.


5

Як коментується у відповіді кафе, описана вище, ps та в деяких випадках pidstat дасть вам середній показник життя ПКПУ. Для отримання більш точних результатів скористайтеся верхом. Якщо вам потрібно запустити верх, як тільки ви можете запустити:

top -b -n 1 -p <PID>

або для обробки лише даних і заголовка:

top -b -n 1 -p <PID> | tail -3 | head -2

без заголовків:

top -b -n 1 -p <PID> | tail -2 | head -1

3
ps aux | awk '{print $4"\t"$11}' | sort | uniq -c | awk '{print $2" "$1" "$3}' | sort -nr

або за процес

ps aux | awk '{print $4"\t"$11}' | sort | uniq -c | awk '{print $2" "$1" "$3}' | sort -nr |grep mysql


1
ps aux|awk  '{print $2,$3,$4}'|grep PID

де перший стовпець - це PID, другий стовпець - використання процесора, використання третього стовпця.


1
ps axo pid,etime,%cpu,%mem,cmd | grep 'processname' | grep -v grep

PID - ідентифікатор процесу

etime - Виконання процесу / Тривалість трансляції

% cpu - використання процесора

% mem - використання пам'яті

cmd - Команда

Замініть ім'я процесу будь-яким процесом, який ви хочете відстежувати, mysql nginx php-fpm тощо ...


1

Усі відповіді тут показують лише відсоток пам'яті для PID.

Ось приклад того, як отримати використання пам'яті rss в КБ для всіх процесів apache, замінити "grep apache" на "grep PID", якщо ви просто хочете переглянути певний PID:

watch -n5 "ps aux -y | grep apache | awk '{print \$2,\$6}'"

Це відбитки:

Every 5.0s: ps aux -y | grep apache | awk '{print $2,$6}'                                                                                                                                                                                                          
Thu Jan 25 15:44:13 2018

12588 9328
12589 8700
12590 9392
12591 9340
12592 8700
12811 15200
15453 9340
15693 3800
15694 2352
15695 1352
15697 948
22896 9360

З відсотком процесора:

watch -n5 "ps aux -y | grep apache | awk '{print \$2,\$3,\$6}'"

Вихід:

Every 5.0s: ps aux -y | grep apache | awk '{print $2,$3,$6}'                                                                                                                                                                                                       
Thu Jan 25 15:46:00 2018

12588 0.0 9328
12589 0.0 8700
12590 0.0 9392
12591 0.0 9340
12592 0.0 8700
12811 0.0 15200
15453 0.0 9340
15778 0.0 3800
15779 0.0 2352
15780 0.0 1348
15782 0.0 948
22896 0.0 9360

1

Для тих, хто певний час намагався задатися питанням, чому обрана відповідь не працює:

ps -p <pid> -o %cpu,%mem

Немає простору між %cpu,і %mem.


1

Це приємний трюк, щоб слідкувати за однією чи кількома програмами в режимі реального часу, а також дивитися результати інших інструментів: watch "top -bn1 -p$(pidof foo),$(pidof bar); tool"


1

Наступна команда отримує середнє використання процесора та пам'яті кожні 40 секунд для певного процесу (pid)

pidstat 40 -ru -p <pid>

Виведення для мого випадку (перші два рядки для використання процесора, другі два рядки для пам'яті):

02:15:07 PM       PID    %usr %system  %guest    %CPU   CPU  Command
02:15:47 PM     24563    0.65    0.07    0.00    0.73     3  java

02:15:07 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
02:15:47 PM     24563      6.95      0.00 13047972 2123268   6.52  java

0

(Якщо ви перебуваєте в MacOS 10.10, спробуйте накопичувальну опцію -c вгорі:

top -c a -pid PID

(Ця опція недоступна в інших Linux, випробувана з Scientific Linux el6 та RHEL6)



0

На основі відповіді @ caf, це добре працює для мене.

Обчисліть середнє значення для даного PID:

мір.ш

times=100
total=0
for i in $(seq 1 $times)
do
   OUTPUT=$(top -b -n 1 -d 0.1 -p $1 | tail -1 | awk '{print $9}')
   echo -n "$i time: ${OUTPUT}"\\r
   total=`echo "$total + $OUTPUT" | bc -l`
done
#echo "Average: $total / $times" | bc

average=`echo "scale=2; $total / $times" | bc`
echo "Average: $average"

Використання:

# send PID as argument
sh measure.sh 3282

-2

Використання процесора та пам'яті одного процесу в Linux або ви можете отримати топ 10 процесорних процесів, що використовуються, використовуючи команду нижче

ps -aux --sort -pcpu | голова -n 11

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.