Мониторинг памяти на Linux через системные вызовы - PullRequest
0 голосов
/ 02 декабря 2011

Я искал способ измерить использование памяти в Linux. Я нашел три основных способа сделать это, и я не уверен, что мне следует использовать, поэтому я спрашиваю здесь мнения.

  1. Похоже, самый распространенный и, возможно, более простой способ Память мониторинга должна прочитать / proc / pid / status и прочитать соответствующее поле, VmSize, VmData или что-то еще. Это способ программы ps, to, vmstat умудряются собирать эту информацию (я имею в виду, мониторинг / proc / pid / ...). Эта информация предоставит мгновенная информация.

  2. Я могу вызвать fork, а затем exec для запуска нужной мне программы. контролировать и ждать4, чтобы получить заполнить структуру rusage. Оттуда Я могу прочитать нужное поле. Кажется, что в Linux wait4 не заполняет поля памяти в структуре rsusage, а только поля, связанные с использованием процессора. Это способ, которым команда времени получает его информация.

  3. Я могу изменить код strace, чтобы отслеживать все последующие brk, Системные вызовы mmap, munmap и суммирование для получения размера кучи. здесь сложно будет расшифровать все возможные аргументы mmap для чтения только чтение | запись, exec и т. д. и проверка возвращаемых значений, чтобы узнать, Система успешно.

Для 3), вы думаете, я могу измерить использование памяти таким образом? Это будет слишком сложно? Я хорошо разбираюсь в коде strace, но недостаточно разбираюсь в памяти, чтобы понять, возможно ли это.

Ответы [ 2 ]

0 голосов
/ 02 декабря 2011

В Linux более точная информация о картах памяти доступна через pmap и с файлом /proc/self/maps или /proc/1234/maps (где 1234 - идентификатор процесса).Попробуйте cat /proc/self/maps, чтобы понять больше.

0 голосов
/ 02 декабря 2011

Если ваша программа интересуется только распределением памяти, выполняемым с помощью malloc (), вы можете взглянуть на mallinfo ().

...