Provided by: manpages-ru_4.18.1-1_all bug

ИМЯ

       memusage - исследует использование памяти программы

СИНТАКСИС

       memusage [параметры]… программа [параметры_программы]…

ОПИСАНИЕ

       Программа  memusage  представляет  собой  сценарий  bash,  который описывает использование
       памяти программой. Сценарий загружает библиотеку libmemusage.so  в  окружение  вызывающего
       (через  переменную  окружения  LD_PRELOAD,  смотрите  ld.so(8)). Библиотека libmemusage.so
       отслеживает распределение памяти путём перехвата вызовов malloc(3), calloc(3),  free(3)  и
       realloc(3);  при  необходимости,  также могут быть перехвачены вызовы mmap(2), mremap(2) и
       munmap(2).

       memusage может выводить собранные  данные  в  текстовом  виде,  также  может  использовать
       memusagestat(1)  (смотрите  вариант  далее) для того, чтобы создать файл PNG, содержащий
       графическое представление собранных данных.

   Сводка использование памяти
       Выводимая memusage строка "сводка использование памяти" содержит три поля:

           heap total
                  Сумма   аргументов  size   всех  вызовов  malloc  (3),   результат   аргументов
                  (nmemb*size) всех вызовов calloc(3) и сумма аргументов length всех вызовов mmap
                  (2) . В случае realloc (3) и  mremap  (2),  если  новый  размер  блока  адресов
                  больше,  чем  в предыдущий размер, добавляется сумма всех таких различий (новый
                  размер минус старый размер).

           heap peak
                  Максимальное значение  всех  аргументов  size  у  malloc(3),  все  произведения
                  nmemb*size  у  calloc(3),  все  аргументы size у realloc(3), аргументы length у
                  mmap(2) и аргументы new_size у mremap(2).

           stack peak
                  Перед первым вызовом любой отслеживаемой функции  сохраняется  адрес  указателя
                  стека  (базовый указатель стека). После каждого вызова функции читается текущий
                  адрес  указателя  стека  и  вычисляет  разница  с  базовым  указателем   стека.
                  Максимальное значение среди вычитаний является пиком стека.

       Сразу  за строкой итога в таблице для каждой перехваченной функции показывается количество
       вызовов, общее количество  выделенной  и  освобождённой  памяти  и  количество  вызовов  с
       ошибками.   Для   realloc(3)   и   mremap(2)   также   есть  поле  «nomove»,  показывающее
       переразмещения,  у  которых  изменился   адрес   блока,   и   поле   «dec»,   показывающее
       переразмещения,  у  которых  уменьшился размер блока. Для realloc(3) в дополнительном поле
       «free» показываются переразмещения, которые  были  вызваны  освобождением  блока  (т.  е.,
       размер переразмещения был равен 0).

       Таблица  «realloc/total  memory»,  выводимая  memusage, не отражает случаи, где realloc(3)
       используется для переразмещения блока памяти меньшего размера, чем предыдущий.  Это  может
       привести  к  тому,  что  сумма  всех ячеек «total memory» (кроме «free») будет больше, чем
       ячейка «free/total memory».

   Гистограмма размеров блоков
       «Гистограмма размеров блоков»  выдает разбивку адресованных блоков по размерам.

ПАРАМЕТРЫ

       -n имя, --progname=имя
              Имя файла профилируемой программы.

       -p file, --png=file
              Создать изображение в формате PNG и сохранить его в

       -d файл, --data=файл
              Создать двоичный файл данных и сохранить его в файл.

       -u, --unbuffered
              Не буферизуйте вывод.

       -b size, --buffer=size
              Собрать size записей перед тем, как записать их.

       --no-timer
              Отключить измерение значения указателя стека на основе таймера (SIGPROF).

       -m, --mmap
              Также трассировать mmap(2), mremap(2) и munmap(2).

       -?, --help
              Показать справку по использованию и завершить работу.

       --usage
              Показать короткое сообщение об использовании и завершить работу.

       -V, --version
              Показать информацию о версии и завершить работу.

       Следующие параметры применяются только когда используется графический вывод:

       -t, --time-based
              По оси X — время (а не количество вызовов функций).

       -T, --total
              Построить также график общего использования памяти.

       --title=название
              Использовать название в качестве заголовка графика.

       -x size, --x-size=size
              Рисовать график шириной в size пикселов.

       -y size, --y-size=size
              Рисовать график высотой в size пикселов.

КОД РЕЗУЛЬТАТА

       The exit status of memusage is equal to the exit status of the profiled program.

ДЕФЕКТЫ

       Сообщения об ошибках доступны по адресу ⟨http://www.gnu.org/software/libc/bugs.html

ПРИМЕРЫ

       Ниже показана простая программа,  которая  переразмещает  блок  памяти  в  цикле,  который
       достигает  пика до того как размер циклически переразмещаемой памяти достигнет нуля. После
       компиляции программы и запуска следующих команд  график  использования  памяти  программой
       можно найти в файле memusage.png:

           $ memusage --data=memusage.dat ./a.out
           ...
           Memory usage summary: heap total: 45200, heap peak: 6440, stack peak: 224
                   total calls  total memory  failed calls
            malloc|         1           400             0
           realloc|        40         44800             0  (nomove:40, dec:19, free:0)
            calloc|         0             0             0
              free|         1           440
           Histogram for block sizes:
             192-207             1   2% ================
           ...
            2192-2207            1   2% ================
            2240-2255            2   4% =================================
            2832-2847            2   4% =================================
            3440-3455            2   4% =================================
            4032-4047            2   4% =================================
            4640-4655            2   4% =================================
            5232-5247            2   4% =================================
            5840-5855            2   4% =================================
            6432-6447            1   2% ================
           $ memusagestat memusage.dat memusage.png

   Исходный код программы
       #include <stdio.h>
       #include <stdlib.h>

       #define CYCLES 20

       int
       main(int argc, char *argv[])
       {
           int i, j;
           size_t size;
           int *p;

           size = sizeof(*p) * 100;
           printf("malloc: %zu\n", size);
           p = malloc(size);

           for (i = 0; i < CYCLES; i++) {
               if (i < CYCLES / 2)
                   j = i;
               else
                   j--;

               size = sizeof(*p) * (j * 50 + 110);
               printf("realloc: %zu\n", size);
               p = realloc(p, size);

               size = sizeof(*p) * ((j + 1) * 150 + 110);
               printf("realloc: %zu\n", size);
               p = realloc(p, size);
           }

           free(p);
           exit(EXIT_SUCCESS);
       }

СМ. ТАКЖЕ

       memusagestat(1), mtrace(1), ld.so(8)

ПЕРЕВОД

       Русский  перевод  этой страницы руководства был сделан aereiae <aereiae@gmail.com>, Alexey
       <a.chepugov@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>,  Dmitriy  S.  Seregin
       <dseregin@59.ru>,       Dmitry      Bolkhovskikh      <d20052005@yandex.ru>,      ITriskTI
       <ITriskTI@gmail.com>, Max Is <ismax799@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>,  Иван
       Павлов <pavia00@gmail.com> и Малянов Евгений Викторович <maljanow@outlook.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.