Динамический захват использования процессора и памяти

StackOverflow https://stackoverflow.com/questions/806830

Вопрос

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

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

Это было полезно?

Решение

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

Пример:

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

Другие советы

Если вы хотите динамически отслеживать использование ЦП и памяти для всего Linux-системы, вам также может помочь следующая команда:

Процессор

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}' это приведет к сбросу временной метки каждой итерации

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top