Как лучше всего измерить использование памяти распределенным приложением?
Я не уверен, если использовать ps
На каждой машине лучший подход к этой проблеме — чем разумнее решение, тем лучше (:
П.С .: Приложение находится в c++
и должен быть выполнен с использованием linux
,
Установите один из нескольких действительно хороших инструментов мониторинга корпоративных ЦОД с открытым исходным кодом. Хорошие из них:
Они ужасно просты в установке и дают вам не только память, но и любые другие системные свойства, которые вы можете потрясти.
Чтобы программно использовать память, прочитайте /proc/self/statm
:
#include <fstream>
#include <iostream>
int main()
{
std::ifstream statm("/proc/self/statm");
size_t mem_virt, mem_rss, mem_shared;
statm >> mem_virt >> mem_rss >> mem_shared;
std::cout << "Memory stats:" << std::endl <<
"Virtual memory size: " << mem_virt << std::endl <<
"Resident memory size: " << mem_rss << std::endl <<
"Shared memory size: " << mem_shared << std::endl;
return 0;
}
Я думаю, вы в основном заинтересованы в объем резидентной памяти, то есть сколько оперативной памяти доступно программе прямо сейчас. Увидеть ответ от ServerFault который описывает значение этих трех типов.
Я бы предложил реализовать простую логику в отдельном потоке вашего приложения. Это будет спать большую часть времени, просыпаться раз в пару минут, позвонить mallinfo и поместите эти данные в журнал или сеть.
Есть приложение для проверки памяти под названием alleyoop (которое использует lib valgrind), которое может контролировать программу. Я рекомендую проверить это: http://alleyoop.sourceforge.net/
Ты можешь использовать
cat /proc/PROC_PID/smaps
чтобы получить подробную информацию обо всех страницах памяти, используемых вашим процессом. Однако у вас нет указания, действительно ли память используется или просто зарезервирована. Существует также
pmap -x PROC_ID, doing similar work.
Наконец, есть
cat/proc/PROC_ID/status | grep Vm
предоставляя вам информацию обо всех типах памяти, используемых вашей программой.