LINUX.ORG.RU

Как вести лог потребления памяти программой?

 ,


0

2

На удалённой машине (подключаюсь по ssh, сессия часто рвётся) выполняется несколько экземпляров программы memory_eater. Требуется записать в файл, сколько какой потребляет памяти. Пока я пользуюсь командой:

top -b -d60 -c | grep memory_eater > memory.log & disown

Главный недостаток – в лог попадает команда grep. top -b -d60 -c | grep memory_eater | grep -v grep > memory.log & disown выглядит громоздко.

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

Если будете предлагать другие программы – желательно то, что обычно стоит в системах по умолчанию.

★★★

Последнее исправление: olegd (всего исправлений: 1)

Ответ на: комментарий от bugfixer

valgrind massif

Вот про это я и говорил «желательно по умолчанию». Чтобы не вводить в ступор пользователя, который может скопировать строку из документации, но с трудом отличает apt от zypper-а.

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

Так massif не хватает?

Или мы о разных вещах сейчас?

Если программу надо запускать как valgring prog=massif memory_eater, то это не то, что я ищу. Нужно тестирование в условиях, имитирующих реальные.

olegd ★★★
() автор топика
Последнее исправление: olegd (всего исправлений: 1)
Ответ на: комментарий от vbr

Попробуй grep ‘^memory_eater’ …

Команда из командной строки будет не в первой, а в последней колонке. Как задавать состав и порядок колонок в выводе top -b?

Хотя стоит попробовать grep '\t\./memory_eater, спасибо.

Для даты времени ts

Что такое ts?

P.S. \t с дефолтными колонками не сработало, сработало '[0-9] ./memory_eater'

olegd ★★★
() автор топика
Последнее исправление: olegd (всего исправлений: 1)
Ответ на: комментарий от olegd

Можно простой пример использования?

Я даже не знаю чего именно вы от меня ждёте - настолько стандартная хрень, что я в растеренности где и начать. Покажет гораздо больше чем per-process memory usage. В динамике.

bugfixer ★★★★
()
Ответ на: комментарий от bugfixer

sar?

Я даже не знаю чего именно вы от меня ждёте

Как посмотреть объём памяти, занятый процессом? То, что в Windows называется private working set. Чтобы суммировалось и занятое в физической памяти, и в свопе.

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

Не проверял

Виснет на строке LIST="$( top -b -d60 -c )". top -b без ключа -n будет бесконечно выводить информацию. Можно поставить -n 1 и дёргать скрипт в цикле или через watch – так работает. И grep в top отсутствует, так как он не висит в ожидании вывода top, а каждый раз запускается по новой.

Теперь другая проблема – в выводе top нужно поле USED. Как его туда добавить?

P.S. Помимо костыльного решения изменить колонки в интерактивном режиме командой «f» и сохранить «W».

P.P.S. А -c не просто задаёт вывод командной строки, а переключает между командной строкой и просто именами программ на противоположное интерактивному режиму.

P.P.P.S. А если процессов memory_eater несколько, дата добавляется только в первую строку.

olegd ★★★
() автор топика
Последнее исправление: olegd (всего исправлений: 3)
Ответ на: комментарий от olegd

Да, top должен завершиться, конечно. И если процессов больше одного то при печати в лог лучше заменить табуляцию на перевод строки \n.

Можно ещё использовать что нибудь типа ps -Ao pid,command , но оно занимаемых ресурсов наверно не даст.

sin_a ★★★★★
()
$ pidof firefox-esr
10158 10155 10113 10078 10047 9987 2730 2493 2395 2273 2202 2116 2044

$ cat /proc/10158/status
Name:   Web Content
.........
VmPeak:  2415060 kB
VmSize:  2414860 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:     71276 kB
VmRSS:     71276 kB
RssAnon:           11680 kB
RssFile:           58956 kB
RssShmem:            640 kB
VmData:    38992 kB
VmStk:       132 kB
VmExe:       512 kB
VmLib:    125512 kB
VmPTE:       484 kB
VmSwap:        0 kB
.......
anonymous
()