Назад | Перейти на главную страницу

Получите максимальное использование памяти исполняемым файлом linux

Мне нужен сценарий оболочки, который получит максимальное потребление памяти исполняемым файлом Linux. Исполняемый файл может порождать дочерние процессы, используя значительные объемы ОЗУ, которые должны быть включены в общий объем.

я пробовал /usr/bin/time -f "%M" /path/to/executable, но это всегда дает 0 хотя используя ps Я могу убедиться, что процесс действительно потребляет значительное количество оперативной памяти.

Почему time давая мне 0 все время, и как мне получить номер, который я ищу?

думаю time -f %M работает только в последних ядрах Linux (экспериментально не поддерживается в 2.6.26 / amd64 и поддерживается в 2.6.32 / i386).

Предыдущий тред на Stack Overflow не нашлось много.

Без поддержки ядра контролировать использование памяти довольно сложно. Есть несколько способов сделать это:

  • LD_PRELOAD небольшая библиотека, которая перегружает mmap, sbrk и другие системные вызовы, выделяющие память (при условии, что вы не запускаете статические двоичные файлы).
  • ptrace процессы действительно наблюдают за распределением памяти и ее разветвлением.
  • Смотреть /proc/ (работает только для одного процесса, и вы не знаете, что происходит между мерами).

Все эти способы требуют некоторого программирования; Я не знаю ни одного существующего инструмента.

Я рекомендую использовать https://github.com/gsauthof/cgmemtime.

cgmemtime измеряет интенсивное использование памяти RSS + CACHE процессом и его дочерними процессами.

Для этого он помещает процесс в свою собственную контрольную группу.

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

Теперь возникает вопрос: сколько памяти фактически используется в результате выполнения A?

Ответ: 60 МБ

cgmemtime - инструмент, чтобы ответить на такие вопросы.

pmap показывает всю память, выделенную процессу, и даже дает вам общее количество. Обнаружить дочерние процессы сложнее, возможно, вы можете объединить его с strace но я не могу придумать простой способ сделать это.

Команду ps можно использовать для измерения объема памяти, используемой каждым процессом.

% MEM показывает процент физической памяти, используемой процессом. Хотя это не всегда полная картина, он может идентифицировать процессы, которые отвечают за подкачку и подкачку системы.

SZ показывает приблизительный виртуальный размер процесса.

RSS - это размер резидентного набора и фактический объем памяти, который процесс использовал при запуске ps.

Проверьте свои человек пс страницу с вариантами для перечисления деревьев процессов.