LINUX.ORG.RU

Тестирование программы и отслеживание нагрузки процессора и ОЗУ.


0

1

Всем привет!

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

Подскажите, пожалуйста, что мне можно выбрать для моих нужд?

Хочется такой софт, чтобы результаты нагрузки на процессор и использования ОЗУ писались в лог.

Спасибо.

sar из sysstat.

mv ★★★★★
()

Я на сервера ставлю collectd - он достаточно непрожорлив к ресурсам и достаточно точно собирает показатели (по умолчанию - раз в 5 секунд). Работает как демон, пишет все в лог (в формате rrd); нужно ставить дополнительные GUI для просмотра логов.

dmitry_vk ★★★
()
while [ true ]; do ps -eo cpu,vsize <your_app_pid> >> $LOG; sleep 0.1; done

Потом берём awk/perl, пишем однострочник и парсим лог.

DELIRIUM ☆☆☆☆☆
()

Спасибо всем ответившим. Кажется, collectd - то, что нужно. Нашёл пример на collectd.org - http://collectd.org/wiki/index.php/Plugin:exec-redis.sh#Example_graph Не совсем понятно, как для конкретного приложения извлекать информацию про использование памяти и загрузку процессора.

помогите с примером, пожалуйста.

ru_core
() автор топика
Ответ на: комментарий от DELIRIUM

DELRIUM,

Ваш пример интересен, спасибо, однако он почему-то пишет информацию по всем процессам, а не по нужному мне PID'u.

ru_core
() автор топика
Ответ на: комментарий от ru_core

Писал по памяти с винды (был у подружки дома, там нету линуксов). Суть была в том, чтобы идею отразить, man ps для деталей ;-)

DELIRIUM ☆☆☆☆☆
()

Всем спасибо за ответы.

Однако появилось одно «НО». Приложение, которое мне нужно отслеживать (его нагрузку и использование памяти) многопоточное, так что по pid'у не выйдет отслеживать нужные мне параметры.

Подскажите, пожалуйста, как правильно мне отслеживать нагрузку на CPU и использование приложением памяти, если оно (приложение многопоточное)?

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

Что скажете?

ru_core
() автор топика

дополнение: то есть в приложении будет много процессов, а значит у каждого будет свой pid, следовательно нужно будет отслеживать pid каждого из процессов.

Для этого нужно либо:

1) вытягивать информацию конкретно по имени приложения, но я не уверен, что такой вариант возможнен; 2) сделать нового пользователя и под ним запускать нужное приложение и тут же делать мониторинг загрузки процессора и памяти (ДЛЯ ПОЛЬЗОВАТЕЛЯ), потому что от имени нового пользователя запущено несколько процессов всего, которые не нагружают систему.

Может есть еще варианты, подскажите, пожалуйста, как правильно реализовать?

ru_core
() автор топика
Ответ на: комментарий от ru_core

Многопоточное приложение живет внутри одного процесса/пида.

Если несколько приложений/процессов, то пидов будет тоже несколько, необходимо фильтровать выхлоп ps для всех процессов по именам (последняя колонка вывода).

unfo ★★★★★
()

Итак, ps по идее не подходит и вот почему:

With ps or similiar tools you will only get the amount of memory pages allocated by that process. This number is correct, but:

a) does not reflect the actual amount of memory used by the application, only the amount of memory reserved for it

b) can be misleading if pages are shared, for example by several threads or by using dynamically linked libraries

If you really want to know what amount of memory your application actually uses, you need to run it within a profiler. For example, valgrind can give you insights about the amount of memory used, and, more importantly, about possible memory leaks in your program.

неужели профилятор - единственное решение?

ru_core
() автор топика

Итак решение найдено после совещания с тимлидом:

в принципе достаточно будет мониторинга памяти, получаемого с помощью ps.

однострочник:

while [ true ]; do ps -p $(pidof -s <application_name>) -o %cpu,rss,vsize,etime >> LOG; sleep 0.1; done

Всем спасибо за участие.

ru_core
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.