4

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

我不确定ps在每台机器上使用是否是解决这个问题的最佳方法——解决方案越理智越好(:

PS:应用程序在 中c++,将使用linux.

4

5 回答 5

4

安装几个非常好的开源企业数据中心监控工具之一。好的是:

它们非常易于安装,不仅为您提供内存,还为您提供任何其他您可以动摇的系统属性。

于 2013-05-16T05:47:05.493 回答
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;
}

我猜您最感兴趣的是resident memory size,即程序现在可以访问多少 RAM。请参阅ServerFault 的回答,其中描述了这三种类型的含义。

于 2013-05-17T14:52:50.153 回答
1

我建议在应用程序的单独线程中实现简单的逻辑。它大部分时间都在睡觉,几分钟后醒来一次,调用mallinfo并将该数据放入日志或网络。

于 2013-05-16T18:16:10.410 回答
0

有一个名为 alleyoop 的内存检查器应用程序(它使用 valgrind 库)可以监控程序。我建议检查一下:http ://alleyoop.sourceforge.net/

于 2013-05-13T21:41:19.060 回答
0

您可以使用

cat /proc/PROC_PID/smaps 

为了获取您的进程使用的所有内存页面的详细信息。但是,您不知道内存是真正使用还是只是保留。还有

pmap -x PROC_ID, doing similar work.

最后,有

cat/proc/PROC_ID/status | grep Vm 

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

于 2013-05-14T21:37:07.133 回答