2016-03-15 7 views
0

Как измерить объем памяти, потребляемый процессом? процесс завершается очень быстро, поэтому утилиты, такие как верх, бесполезны. Я пытался использовать массив valgrind, но он измеряет только память, выделенную через malloc/new + stack, а не статические переменные, например. - pages-as-heap не помогает, потому что он также отображает карту памяти.Использование распределенной памяти в Linux

+0

Посмотрите здесь http://unix.stackexchange.com/questions/21836/how-to-find-out-total-memory-resource-usage-with-ps – LibertyPaul

+0

Вы не прочитали вопрос? Я не могу использовать ps, процесс быстро заканчивается –

+0

Эй, Джани, мой ответ ниже для вас? Мне бы очень хотелось узнать, нужна ли вам дополнительная помощь. –

ответ

1

Что-то, что может сработать для вас, это использовать скрипт, который будет запускать «ps» сразу после запуска вашей программы. Я написал следующий скрипт, который должен работать для ваших целей, просто замените переменные наверху вашими конкретными деталями. В настоящее время он запускает «netstat» в фоновом режиме (обратите внимание на символ &) и сэмплирует память 10 раз с интервалами 0,1 секунды между образцами, записывая результаты проверки памяти в файл по мере ее поступления. Я запустил это на cygwin, и он работает (минус параметры -o rss, vsz), в настоящий момент у меня нет доступа к Linux-машине, но он должен быть прост в адаптации, если по какой-то причине он не сразу Работа.

#! /bin/bash 

saveFileName=saveFile.txt 
userName=jacob 
programName=netstat 
numberOfSamples="10" 
delayBetweenSamples="0.1" 
saveFileName=saveFile 

i="0" 
$programName & 
while [ $i -lt $numberOfSamples ] 
do 
ps -u $userName -o rss,vsz | grep $programName >> $saveFileName 
i=$[$i+1] 
sleep $delayBetweenSamples 
done 

Если ваша программа завершается так быстро, что задержка между выполнением его и работает пс в сценарии слишком долго вы могли бы рассмотреть возможность запуска вашей программы с задержкой и используя очень высокую частоту дискретизации, чтобы попытаться поймать его. Вы можете сделать это, используя «sleep» и два амперсанда, например sleep 2 && netstat. Это будет ждать 2 секунды, а затем запустить netstat.

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

Смежные вопросы