.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2013, Peter Schiffer .\" and Copyright (C) 2014, Michael Kerrisk .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH memusage 1 "25 ноября 2024 г." "Linux man\-pages 6.12" .SH НАИМЕНОВАНИЕ memusage \- исследует использование памяти программы .SH ОБЗОР .SY memusage [\fIoption\fP\ .\|.\|.\&] \fIprogram\fP [\fIprogramoption\fP\ .\|.\|.] .YS .SH ОПИСАНИЕ \fBmemusage\fP is a \fBbash\fP(1) script which profiles memory usage of the program, \fIprogram\fP. It preloads the \fBlibmemusage.so\fP library into the caller's environment (via the \fBLD_PRELOAD\fP environment variable; see \fBld.so\fP(8)). The \fBlibmemusage.so\fP library traces memory allocation by intercepting calls to \fBmalloc\fP(3), \fBcalloc\fP(3), \fBfree\fP(3), and \fBrealloc\fP(3); optionally, calls to \fBmmap\fP(2), \fBmremap\fP(2), and \fBmunmap\fP(2) can also be intercepted. .P \fBmemusage\fP может выводить собранные данные в текстовом виде, также может использовать \fBmemusagestat\fP(1) (смотрите вариант \fB\-р\fP далее) для того, чтобы создать файл PNG, содержащий графическое представление собранных данных. .SS "Сводка использование памяти" Выводимая \fBmemusage\fP строка "сводка использование памяти" содержит три поля: .RS 4 .TP \fBheap total\fP Sum of \fIsize\fP arguments of all \fBmalloc\fP(3) calls, products of arguments (\fIn\fP*\fIsize\fP) of all \fBcalloc\fP(3) calls, and sum of \fIlength\fP arguments of all \fBmmap\fP(2) calls. In the case of \fBrealloc\fP(3) and \fBmremap\fP(2), if the new size of an allocation is larger than the previous size, the sum of all such differences (new size minus old size) is added. .TP \fBheap peak\fP Maximum of all \fIsize\fP arguments of \fBmalloc\fP(3), all products of \fIn\fP*\fIsize\fP of \fBcalloc\fP(3), all \fIsize\fP arguments of \fBrealloc\fP(3), \fIlength\fP arguments of \fBmmap\fP(2), and \fInew_size\fP arguments of \fBmremap\fP(2). .TP \fBstack peak\fP Перед первым вызовом любой отслеживаемой функции сохраняется адрес указателя стека (базовый указатель стека). После каждого вызова функции читается текущий адрес указателя стека и вычисляет разница с базовым указателем стека. Максимальное значение среди вычитаний является пиком стека. .RE .P Сразу за строкой итога в таблице для каждой перехваченной функции показывается количество вызовов, общее количество выделенной и освобождённой памяти и количество вызовов с ошибками. Для \fBrealloc\fP(3) и \fBmremap\fP(2) также есть поле «nomove», показывающее переразмещения, у которых изменился адрес блока, и поле «dec», показывающее переразмещения, у которых уменьшился размер блока. Для \fBrealloc\fP(3) в дополнительном поле «free» показываются переразмещения, которые были вызваны освобождением блока (т. е., размер переразмещения был равен 0). .P Таблица «realloc/total memory», выводимая \fBmemusage\fP, не отражает случаи, где \fBrealloc\fP(3) используется для переразмещения блока памяти меньшего размера, чем предыдущий. Это может привести к тому, что сумма всех ячеек «total memory» (кроме «free») будет больше, чем ячейка «free/total memory». .SS "Гистограмма размеров блоков" «Гистограмма размеров блоков» выдает разбивку адресованных блоков по размерам. .SH ПАРАМЕТРЫ .TP \fB\-n\ \fP\fIимя\fP,\ \fB\-\-progname=\fP\fIимя\fP Имя файла профилируемой программы. .TP \fB\-p\ \fP\fIfile\fP,\ \fB\-\-png=\fP\fIfile\fP Создать изображение в формате PNG и сохранить его в \fIfile\fP. .TP \fB\-d\ \fP\fIфайл\fP,\ \fB\-\-data=\fP\fIфайл\fP Создать двоичный файл данных и сохранить его в \fIфайл\fP. .TP \fB\-u\fP,\ \fB\-\-unbuffered\fP Не буферизуйте вывод. .TP \fB\-b\ \fP\fIsize\fP,\ \fB\-\-buffer=\fP\fIsize\fP Собрать \fIsize\fP записей перед тем, как записать их. .TP \fB\-\-no\-timer\fP Отключить измерение значения указателя стека на основе таймера (\fBSIGPROF\fP). .TP \fB\-m\fP,\ \fB\-\-mmap\fP Также трассировать \fBmmap\fP(2), \fBmremap\fP(2) и \fBmunmap\fP(2). .TP \fB\-?\fP,\ \fB\-\-help\fP Показать справку по использованию и завершить работу. .TP \fB\-\-usage\fP Показать короткое сообщение об использовании и завершить работу. .TP \fB\-V\fP,\ \fB\-\-version\fP Показать информацию о версии и завершить работу. .TP Следующие параметры применяются только когда используется графический вывод: .TP \fB\-t\fP,\ \fB\-\-time\-based\fP По оси X — время (а не количество вызовов функций). .TP \fB\-T\fP,\ \fB\-\-total\fP Построить также график общего использования памяти. .TP \fB\-\-title=\fP\fIназвание\fP Использовать \fIназвание\fP в качестве заголовка графика. .TP \fB\-x\ \fP\fIsize\fP,\ \fB\-\-x\-size=\fP\fIsize\fP Рисовать график шириной в \fIsize\fP пикселов. .TP \fB\-y\ \fP\fIsize\fP,\ \fB\-\-y\-size=\fP\fIsize\fP Рисовать график высотой в \fIsize\fP пикселов. .SH "КОД ЗАВЕРШЕНИЯ" Код завершения \fBmemusage\fP равен коду завершения профилируемой программы. .SH ОШИБКИ Сообщения об ошибках доступны по адресу .UR http://www.gnu.org/software/libc/bugs.html .UE .SH ПРИМЕРЫ Ниже показана простая программа, которая переразмещает блок памяти в цикле, который достигает пика до того как размер циклически переразмещаемой памяти достигнет нуля. После компиляции программы и запуска следующих команд график использования памяти программой можно найти в файле \fImemusage.png\fP: .P .in +4n .EX $ \fBmemusage \-\-data=memusage.dat ./a.out\fP \&... 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% ================ $ \fBmemusagestat memusage.dat memusage.png\fP .EE .in .SS "Исходный код программы" .EX #include #include \& #define CYCLES 20 \& int main(int argc, char *argv[]) { int i, j; size_t size; int *p; \& size = sizeof(*p) * 100; printf("malloc: %zu\[rs]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\[rs]n", size); p = realloc(p, size); \& size = sizeof(*p) * ((j + 1) * 150 + 110); printf("realloc: %zu\[rs]n", size); p = realloc(p, size); } \& free(p); exit(EXIT_SUCCESS); } .EE .SH "СМОТРИТЕ ТАКЖЕ" \fBmemusagestat\fP(1), \fBmtrace\fP(1), \fBld.so\fP(8) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал(и) aereiae , Alexey , Azamat Hackimov , Dmitriy S. Seregin , Dmitry Bolkhovskikh , ITriskTI , Max Is , Yuri Kozlov , Иван Павлов , Малянов Евгений Викторович , Сухичев Михаил Иванович и Kirill Rekhov . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .