Как измерить фактическое использование памяти приложения или процесса? - PullRequest
664 голосов
/ 25 сентября 2008

Этот вопрос охватывается здесь очень подробно.

Как вы измеряете использование памяти приложением или процессом в Linux?

Из статьи в блоге Понимание использования памяти в Linux , ps не является точным инструментом для этой цели.

Почему ps является "неправильным"

В зависимости от того, как вы на это смотрите, ps не сообщает о реальном использовании памяти процессами. Что он действительно делает, так это показывает, сколько реальной памяти каждый процесс занял бы , если бы это был единственный процесс, выполняющий . Конечно, на типичном компьютере с Linux в каждый момент времени выполняется несколько десятков процессов, а это означает, что номера VSZ и RSS, сообщаемые ps, почти определенно неверны .

Ответы [ 31 ]

5 голосов
/ 04 марта 2013

Ниже командной строки вы получите общий объем памяти, используемый различными процессами, работающими на компьютере с Linux, в МБ

ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' | awk '{total=total + $1} END {print total}'
4 голосов
/ 25 сентября 2008

Получить Вальгринд. дайте ему свою программу для запуска, и она расскажет вам много об использовании памяти.

Это относится только к случаю, когда программа работает некоторое время и останавливается. Я не знаю, сможет ли valgrind получить доступ к уже запущенному процессу или не должен останавливать такие процессы, как демоны.

3 голосов
/ 06 августа 2009

Если вы хотите что-то быстрее, чем профилирование с помощью Valgrind, а ваше ядро ​​старше и вы не можете использовать smaps, ps с опциями для отображения резидентного набора процесса (с ps -o rss,command) может дать вам быстрый и _aproximation_ разумного объема используемой памяти без замены.

3 голосов
/ 07 августа 2014

Редактировать: это работает на 100% хорошо только при увеличении потребления памяти

Если вы хотите отслеживать использование памяти данным процессом (или группой общих общих имен, например google-chrome), вы можете использовать мой bash-скрипт:

while true; do ps aux | awk ‚{print $5, $11}’ | grep chrome | sort -n > /tmp/a.txt; sleep 1; diff /tmp/{b,a}.txt; mv /tmp/{a,b}.txt; done;

это будет постоянно искать изменения и распечатывать их.

enter image description here

2 голосов
/ 21 октября 2013

Я бы посоветовал вам использовать поверх. Вы можете найти все об этом на этой странице . Он способен обеспечить все необходимые KPI для ваших процессов, а также может записывать в файл.

2 голосов
/ 20 июня 2013

Проверьте сценарий оболочки, чтобы проверить использование памяти приложением в linux . Также доступно на github и в версии без пасты и bc .

1 голос
/ 25 сентября 2008

Еще один голос за здесь, но я хотел бы добавить, что вы можете использовать такой инструмент, как Alleyoop , чтобы помочь вам интерпретировать результаты, сгенерированные valgrind.

Я все время использую эти два инструмента, и у меня всегда есть скудный код без утечек, чтобы гордо показать его;)

1 голос
/ 02 октября 2014

Хотя этот вопрос, похоже, касается проверки запущенных в данный момент процессов, я хотел увидеть пиковую память, используемую приложением от начала до конца. Помимо valgrind, вы можете использовать tstime , что намного проще. Он измеряет использование высокопроизводительной памяти (RSS и виртуальная). С этот ответ .

0 голосов
/ 04 февраля 2017

/ prox / xxx / numa_maps дает некоторую информацию: N0 = ??? N1 = ???. Но этот результат может быть ниже, чем фактический результат, поскольку он учитывает только те, которые были затронуты.

0 голосов
/ 19 января 2016

На основании ответа на связанный вопрос .

Вы можете использовать SNMP для получения памяти и использования процессора процессом в определенном устройстве в сети:)

Требования:

  • на устройстве, на котором запущен процесс, должна быть установлена ​​и запущена snmp
  • snmp должен быть настроен на прием запросов, из которых вы будете запускать скрипт ниже (он может быть настроен в snmpd.conf)
  • вы должны знать идентификатор процесса (pid) процесса, который вы хотите отслеживать

Примечания:

  • HOST-RESOURCES-MIB :: hrSWRunPerfCPU - это количество сантисекунд общих ресурсов ЦП системы, потребляемых этим процессом. Обратите внимание, что в многопроцессорной системе это значение может увеличиваться более чем на одну сантисекунду за одну сантисекунду реального времени (настенные часы).

  • HOST-RESOURCES-MIB :: hrSWRunPerfMem - это общий объем реальной системной памяти, выделенной этому процессу.

**

Сценарий мониторинга процесса:

**

echo "IP: "
read ip
echo "specfiy pid: "
read pid
echo "interval in seconds:"
read interval

while [ 1 ]
do
    date
    snmpget -v2c -c public $ip HOST-RESOURCES-MIB::hrSWRunPerfCPU.$pid
    snmpget -v2c -c public $ip HOST-RESOURCES-MIB::hrSWRunPerfMem.$pid
    sleep $interval;
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...