Главная » 2017 » Ноябрь » 16 » man memusage
01:27
man memusage

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


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



ОБЗОР


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



ОПИСАНИЕ


Программа memusage представляет собой сценарий bash, который описывает
использование памяти программой. Сценарий загружает библиотеку libmemusage.so в
окружение вызывающего (через переменную окружения LD_pLOAD, смотрите 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».

Гистограмма для размеров блоков
"Гистограмма для размеров блоков" дает разбивку адрессования памяти в блоках
различного размера.


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



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


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



ДЕФЕКТЫ


Сообщения об ошибках доступны по адресу
⟨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
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;
int *p;

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

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

printf("realloc: %zd\n", sizeof(int) * (j * 50 + 110));
p = realloc(p, sizeof(int) * (j * 50 + 100));

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

free(p);
exit(EXIT_SUCCESS);
}



СМОТРИТЕ ТАКЖЕ


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



Категория: (1) Прикладные программы и команды оболочки | Просмотров: 783 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar