Назад | Перейти на главную страницу

* nix измеряет использование памяти

Я хотел бы измерить общую память (например, ОЗУ), используемую программой во время ее выполнения. В идеале что-то вроде time который запускает программу и печатает статистику при выходе.

Есть ли в мире unix / linux / bsd такой стандартный инструмент? Спасибо.

РЕДАКТИРОВАТЬ:

программа, которую я пытаюсь профилировать, требует для выполнения долей секунды, поэтому все, что подразумевает «во время работы, проверьте это», не сработает. вот почему я прошу инструмент, подобный «времени».

В strace команда может быть полезна. Он покажет вам, в каких системных вызовах уходит время:

$ strace -cTv zip /tmp/test.zip /usr/share/dict/words
  adding: usr/share/dict/words (deflated 73%)
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00    0.000055           2        34           read
  0.00    0.000000           0        21           write
  0.00    0.000000           0        12         3 open
  0.00    0.000000           0         9           close
  0.00    0.000000           0         3         3 access
  0.00    0.000000           0         1           rename
  0.00    0.000000           0         3           brk
  0.00    0.000000           0         1           gettimeofday
  0.00    0.000000           0         4           munmap
  0.00    0.000000           0         3           mprotect
  0.00    0.000000           0         6           _llseek
  0.00    0.000000           0         6           rt_sigaction
  0.00    0.000000           0        12           mmap2
  0.00    0.000000           0         8         1 stat64
  0.00    0.000000           0         1         1 lstat64
  0.00    0.000000           0         9           fstat64
  0.00    0.000000           0         1           fcntl64
  0.00    0.000000           0         1           set_thread_area
------ ----------- ----------- --------- --------- ----------------
100.00    0.000055                   141         8 total

Если вы не против повторить выполнение несколько раз, вы можете использовать ulimit -Hv, чтобы установить предел памяти для оболочки (в Bash), а затем выполнить двоичный поиск минимума, когда приложение успешно завершит работу.

В Linux вы можете прочитать / proc / [pid] / status; поле VmPeak - это максимальный размер виртуальной памяти, VmHWM - это максимальный размер резидентного набора.

Системный вызов getrusage () может помочь, а может и не помочь. Структура struct rusage содержит, например, поле maxrss, но, по крайней мере, в Linux оно никогда не заполняется.

Я бы предложил valgrind. По крайней мере, приложение-массив будет сообщать статистику использования кучи.

Нет стандартного инструмента, кроме ps (что не так уж и стандартно в отношении параметров / вывода). Это не даст вам time-подобное удобство использования.

Ты можешь использовать nmon для сбора общесистемной статистики он фиксирует использование памяти процессами (вероятно, это будет бесполезно для краткосрочных процессов). Он поддерживает множество платформ.

Вы можете попробовать написать свой собственный сценарий, который сможет это сделать. Он может получить PID запущенной программы и использовать ps или / proc / [pid] / status для получения информации о памяти о ней. Конечно, это не полностью характеризует использование памяти, но должно дать вам хорошее представление.

Просто используйте учет процессов (acct или psacct в зависимости от вашего дистрибутива). Журнал учета процесса включает статистику «использованной памяти».