Запись журнала использования CPU / RAM за период времени в файл на CentOS


8

Я ищу приложение или строку кода, которые позволили бы мне наблюдать за процессом, сохранять информацию в ряде переменных, а затем помещать собранную информацию в файл.

Я пытался с вариациями, topно не повезло. У меня несколько виртуальных серверов CentOS, виртуальная машина - 2 ГБ ОЗУ, 2 процессора.

Сценарий, который работает в течение определенного промежутка времени при написании строк с информацией в текстовом файле, так что в конце я мог бы иметь своего рода таблицу с данными, которые будут работать.

Я собираюсь провести стресс-тестирование сервера, и мне хотелось бы получить данные для составления статистики.

Ответы:


11

Стандарт psдостаточно.

while true; do ps o pcpu,rsz -p $pid | tail -n1 >>usage.log; sleep $interval; done

результат:

0.0  3352
0.3 31640
0.4 36924
0.5 36052
...

Первое поле - загрузка процессора в%, второе - использование физической памяти в килобайтах.


Это было прекрасно, я уже написал длинный скрипт для очистки всех данных из верхнего пакета, но это намного лучше и эффективнее, я очень благодарен, спасибо!
keponk

в конце я продолжал использовать свой скрипт, так как ps дает мне среднее значение загрузки, которое обычно совпадает с CPU%, но это не правило, больше информации об этом в быстром поиске в Google
keponk

1
% CPU здесь - это не%, использованный за интервал, а средний процент за все время работы программы. Я считаю, что это вводит в заблуждение.
Уилл Сьюэлл

2

Если вам нужна точная синхронизация и вы хотите использовать процессор в процентах:

watch --precise -n 1 'top -b -n 1 -p [PID] | tail -n 1 | awk "{print \$9}" >> [PID].log'

1

Я бы предложил sadc/ sar.


Разве это не только для всей системы?
whitequark

@whitequark: это зависит от версии sar. Некоторые версии используют sar -x PIDдругие используют pidstat -p PID.
Приостановлено до дальнейшего уведомления.

Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить сюда основные части ответа и предоставить ссылку для справки.
saji89

0

Вы пытаетесь наблюдать, сколько процессорного времени требует определенный процесс.

Я собирался предложить инструмент статистики CPU для CentOS? но это распространяется на всю систему, а не на один процесс.

Любой процесс покажет время процессора в выводе ps:

$ ps -ef | egrep blah
root     13988 11152  0 Dec16 ?        00:00:05 sshd: xxx [priv]
xxx      14024 13988  0 Dec16 ?        00:06:00 sshd: xxx@pts/0
xxx      14032 14024  0 Dec16 pts/0    07:00:00 -bash
root      1194   679  0 Apr24 ?        2-05:15:14 [kswapd0]
root      1195   679  0 Apr24 ?        2-06:35:49 [kswapd1]
  • 00:00:00 - часы / минуты / секунды процессора. Это будет накапливаться.
  • Вам понадобятся разрешения, чтобы увидеть это, если пользователь не вы.
  • Как только это значение становится больше суток, формат меняется; выше это 2 дня. Ваша процедура разбора должна справиться с этим.

На этом этапе проанализируйте вывод с помощью Python, поработайте над какой-нибудь математикой даты, и все будет отлично.


0

Следующая команда получает среднее значение использования процессора и памяти каждые 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.