衡量分布式应用程序内存使用情况的最佳方法是什么?
我不确定在每台机器上使用ps
是否是解决此问题的最佳方法 - 解决方案越精益越好(:
P.S。:该应用程序位于c++
,将使用linux
执行。
答案 0 :(得分:4)
答案 1 :(得分:3)
要以编程方式获取内存使用情况,请阅读/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;
}
我猜你最感兴趣的是驻留内存大小,也就是说,现在程序可以访问多少RAM。参见an answer from ServerFault,其中描述了这三种类型的含义。
答案 2 :(得分:1)
我建议在应用程序的单独线程中实现简单逻辑。这将在大部分时间内休眠,在几分钟后唤醒一次,拨打mallinfo并将该数据放入日志或网络。
答案 3 :(得分:0)
有一个名为alleyoop的内存检查器应用程序(使用valgrind lib)可以监视程序。我建议您查看一下:http://alleyoop.sourceforge.net/
答案 4 :(得分:0)
您可以使用
cat /proc/PROC_PID/smaps
以获取进程使用的所有内存页面的详细信息。但是,您没有指示内存是真正使用还是仅保留。还有
pmap -x PROC_ID, doing similar work.
最后,还有
cat/proc/PROC_ID/status | grep Vm
提供有关程序使用的所有内存类型的信息。