Измерение Использования оперативной памяти программы

Это должно работать:

# move x clipboard into tmux paste buffer
bind C-p run "tmux set-buffer \"$(xclip -o)\"; tmux paste-buffer"
# move tmux copy buffer into x clipboard
bind C-y run "tmux save-buffer - | xclip -i"
46
16.08.2011, 17:18
5 ответов

Можно использовать tstime для измерения многоводного использования памяти (RSS и виртуальный) процесса.

Например:

$ tstime date       
Tue Aug 16 21:35:02 CEST 2011

Exit status: 0

pid: 31169 (date) started: Tue Aug 16 21:35:02 2011
        real   0.017 s, user   0.000 s, sys   0.000s
        rss      888 kb, vm     9764 kb

Это также поддерживает более легкое для парсинга режима вывода (-t).

24
27.01.2020, 19:34
  • 1
    мне нравится он. Это даже сделало Правильную Вещь с ./tstime -t bash -c 'perl -e "\$a=\"x\"x100000000;\$b=\$a.\$a;\$b=\"\";\$a=\"\";sleep 10;"' –  Ole Tange 22.08.2011, 15:00
  • 2
    "Использование оперативной памяти процессом" не является четко определенным значением: Если существует несколько экземпляров того же выполнения программы, они совместно используют исполняемый файл. Большая часть доли программ glibc (и другие различные библиотеки, их называют "общими" для чего-то). Многие демоны загружают конфигурацию в память и ветвление (2) дети, которые затем совместно используют данные конфигурации. Затем существуют данные в буферах readahead/writebehind, управляемых ядром. И затем существуют сервисы, которые являются стадом слабо связанных процессов (думайте о своей настольной среде и всех ее апплетах и фоновом материале). –  vonbrand 23.01.2013, 18:05
  • 3
    @vonbrand, как Ядро Linux вычисляет значения RSS/VSS, четко определен. –  maxschlepzig 23.01.2013, 21:46
  • 4
    @maxschlepzig, это может вычислить некоторые случайные значения, который не означает, что они имеют в виду то, что Вы думаете, что они имеют в виду: резидентный набор является просто страницами в адресном пространстве процесса, которые в настоящее время находятся в памяти. Это не "память, используемая этим процессом", это включает то, что это совместно использует. –  vonbrand 23.01.2013, 21:50
  • 5
    @vonbrand Большинство вариантов использования измерения использования памяти процесса захочет измерить неразделенные анонимные страницы, которые должны быть очень предсказуемыми с тем же входом. –  Vladimir Panteleev 02.05.2015, 15:56

time встроенная из Вашей оболочки. Если Вам нравится time но нуждаюсь в большей информации, пробую GNU time в подробном (-v) режим:

/usr/bin/time -v sleep 5               
    Command being timed: "sleep 5"
    User time (seconds): 0.00
    System time (seconds): 0.00
    Percent of CPU this job got: 0%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:05.00
    Average shared text size (kbytes): 0
    Average unshared data size (kbytes): 0
    Average stack size (kbytes): 0
    Average total size (kbytes): 0
    Maximum resident set size (kbytes): 2144
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 179
    Voluntary context switches: 2
    Involuntary context switches: 1
    Swaps: 0
    File system inputs: 0
    File system outputs: 0
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0

Ищите пакет "время" или "gnutime" в Вашем диспетчере пакетов.

28
27.01.2020, 19:34
  • 1
    Обратите внимание, что некоторая информация, сообщенная временем GNU, могла быть неточной. Например, в соответствии с Ubuntu 10.04: состояния страницы справочника 'Числа только так хороши как возвращенные wait3 (2)'. Т.е. wait3 заполняет структуру, которая описана в getrusage(2): 'Не все поля значимы в соответствии с Linux [..]'. –  maxschlepzig 16.08.2011, 22:49
  • 2
    Например, на тестовой программе, которая точно выделяет 10 МБ (и касается каждой страницы) - время GNU сообщает о maxRSS 42 608 кибибайт - и tstime отчеты 10 652 кибибайта. Снова в соответствии с Ubuntu 10.04. –  maxschlepzig 16.08.2011, 22:58
  • 3
    , который я буду любить, если это было это простое. На моей машине Ubuntu я попробовал: /usr/bin/time -v perl -e '$a="x"x100000000;$b=$a.$a;sleep 10;'. вершина говорит, что требуется приблизительно 570 МБ, но время говорит 2,3 ГБ. На практике то число не usuable мне. штраф –  Ole Tange 22.08.2011, 14:56
  • 4
    Фактор 4 фиксируется во время GNU 1.7 и таким образом работает как ожидалось. –  Ole Tange 30.01.2013, 15:16
  • 5
    Важное примечание: "Максимальный размер резидентного набора" только работает начиная с Linux 2.6.32. –  Jan Hudec 24.11.2014, 16:45

Возможно, излишество, но я просто нашел это valgrind назвали хороший инструмент massif. Я протестировал его на xterm:

valgrind --trace-children=yes --tool=massif xterm
ms_print massif.out.* | less

И Вы получаете хороший график использования памяти:

    MB
4.230^                     #                    :::::::  :::      @@:     ::: 
     |   @                 #:::@::@@:::::@::::::: :: : ::: :::::::@ ::::::: ::
     |   @               ::#:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::::@@:::::::::: #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::: @ :: ::: : : #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::: @ :: ::: : : #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::: @ :: ::: : : #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::: @ :: ::: : : #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::: @ :: ::: : : #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::: @ :: ::: : : #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
   0 +----------------------------------------------------------------------->Mi
     0                                                                   292.4

наряду с чрезмерно подробной информацией об использовании памяти. Детали в valgrind руководстве.

Программы будут работать о 20x медленнее все же. Кроме того, я выполнил некоторые команды в xterm. Их объем потребляемой памяти был принят во внимание потому что --trace-children=yes опция там!

17
27.01.2020, 19:34
  • 1
    Th 20x скорости делает это unsuable для моей ситуации. Иначе очень симпатичный график! –  Ole Tange 22.08.2011, 14:59
  • 2
    Похоже, что, по крайней мере, в версии 3.8.1 valgrind, который я использую, булевские переменные только приняты в форме "да/нет" и не "истинные/ложные". Шахта жаловалась! :-) –  MakisH 17.02.2016, 03:09

Похож на tstime, больше не работает под некорневым в соответствии с Linux> =3.0. Вот утилита опроса, которую я записал для бездельничания проблемы: https://github.com/jhclark/memusg/blob/master/memusg

3
27.01.2020, 19:34
  • 1
    /usr/bin/time -v дает корректный вывод в более новых версиях. В более старых версиях просто необходимо разделиться на 4 для получения корректной суммы. –  Ole Tange 31.08.2012, 01:42
  • 2
    Однако я не думаю время-v пик поддержек vmemory размер (только RSS). Кто-либо может подтвердить это на последней версии? –  jhclark 01.09.2012, 03:48

, даже если тема довольно старая, я хочу поделиться другим проектом, появившимся от CGRUPS Linux Функция ядра.

https://github.com/gsauthof/cgmemimeTime :

CGMEMTIMTE измеряет использование памяти с высокой водой RSS + кэш-память процесса и его потомки процессы.

Чтобы иметь возможность сделать это, это ставит процесс в свой CGRUP.

Например, процесс A выделения 10 миб и вил ребенка B, что выделяет 20 миб и этот вил ребенка C, который выделяет 30 миб. Все три процесса разделяют окно времени, где их выделения приводят к Соответствующий RSS (размер резидента) Использование памяти.

В настоящее время вопрос: сколько памяти фактически используется в результате Бег?

Ответ: 60 MIB

CGMemime - это инструмент для ответа на такие вопросы.

6
27.01.2020, 19:34

Теги

Похожие вопросы