测量分布式应用程序的内存使用量

时间:2013-02-21 13:27:35

标签: c++ linux performance memory distributed-computing

衡量分布式应用程序内存使用情况的最佳方法是什么?

我不确定在每台机器上使用ps是否是解决此问题的最佳方法 - 解决方案越精益越好(:

P.S。:该应用程序位于c++,将使用linux执行。

5 个答案:

答案 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 

提供有关程序使用的所有内存类型的信息。