Provided by: manpages-ru_4.27.0-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 и сохранить его в file.

       -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 пикселов.

КОД ЗАВЕРШЕНИЯ

       Код завершения memusage равен коду завершения профилируемой программы.

ОШИБКИ

       Сообщения об ошибках доступны по адресу 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>,   Сухичев    Михаил    Иванович    <sukhichev@yandex.ru>    и    Kirill    Rekhov
       <krekhov.dev@gmail.com>

       Этот  перевод является свободной программной документацией; он распространяется на условиях общедоступной
       лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html  версии  3  или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если  вы  обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
       разработчику(ам)  по  его(их)  адресу(ам)  электронной  почты  или  по   адресу   списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                  15 июня 2024 г.                                     memusage(1)