Динамически захватывать использование процессора и памяти - PullRequest
6 голосов
/ 30 апреля 2009

Я запускаю сценарий оболочки для запуска приложения c ++, которое измеряет производительность API. я могу зафиксировать задержку (время, необходимое для возврата значения для заданного набора параметров) API, но я также хочу захватить процессор и использование памяти вместе с интервалами, скажем, 5-10 секунд.

Есть ли способ сделать это, не влияя на производительность системы слишком сильно, и это тоже в том же сценарии? я нашел много примеров, где можно работать вне (независимо) от скрипта, который мы запускаем; но не один, где мы можем сделать в том же сценарии.

Ответы [ 2 ]

2 голосов
/ 09 февраля 2019

Если вы ищете возможность динамического захвата загрузки процессора и памяти для всей системы linux, то следующая команда также может вам помочь:

CPU

vmstat -n 15 10| awk '{now=strftime("%Y-%m-%d %T "); print now $0}'> CPUDataDump.csv &

vmstat используется для сбора счетчиков ЦП

-n для значения задержки, в данном случае это 15, что означает, что каждые 15 секунд будет собираться статистика.

затем 10 - количество интервалов, в этом примере будет 10 итераций

awk '{now=strftime("%Y-%m-%d %T "); print now $0}' это выдает метку времени каждой итерации

в конце файл дампа с & для продолжения

Память

free -m -s 10 10 | awk '{now=strftime("%Y-%m-%d %T "); print now $0}'> DataDumpMemoryfile.csv &

free для сбора статистики

-m для единиц памяти (вы можете использовать -b для байтов, -k для килобайт, -g для гигабайт)

затем 10 - количество интервалов (в этом примере будет 10 итераций)

awk'{now=strftime("%Y-%m-%d %T "); print now $0}' это выдает метку времени каждой итерации

в итоге дамп & для продолжения

1 голос
/ 30 апреля 2009

Я бы предложил использовать команду time , а также команду vmstat . Первый даст использование ЦП при выполнении исполняемого файла, а второй - периодический (то есть раз в секунду) дамп ЦП / памяти / ввода-вывода системы.

Пример:

time dd if=/dev/zero bs=1K of=/dev/null count=1024000
1024000+0 records in
1024000+0 records out
1048576000 bytes (1.0 GB) copied, 0.738194 seconds, 1.4 GB/s
0.218u 0.519s 0:00.73 98.6%     0+0k 0+0io 0pf+0w <== that's time result
...