C++ 测量分布式应用程序的内存使用情况

C++ 测量分布式应用程序的内存使用情况,c++,linux,performance,memory,distributed-computing,C++,Linux,Performance,Memory,Distributed Computing,衡量分布式应用程序内存使用情况的最佳方法是什么 我不确定在每台机器上使用ps是否是解决此问题的最佳方法——解决方案越明智越好(: 备注:该应用程序位于c++,将使用linux执行。有一个名为alleyoop的内存检查器应用程序(它使用valgrind库)可以监视程序。我建议您检查以下内容:您可以使用 cat /proc/PROC_PID/smaps 以获取进程使用的所有内存页的详细信息。但是,您不知道内存是否已真正使用或只是保留。还有 pmap -x PROC_ID, doing simil

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

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


备注:该应用程序位于
c++
,将使用
linux

执行。有一个名为alleyoop的内存检查器应用程序(它使用valgrind库)可以监视程序。我建议您检查以下内容:

您可以使用

cat /proc/PROC_PID/smaps 
以获取进程使用的所有内存页的详细信息。但是,您不知道内存是否已真正使用或只是保留。还有

pmap -x PROC_ID, doing similar work.
最后,还有一个问题

cat/proc/PROC_ID/status | grep Vm 

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

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


这些非常容易安装,不仅可以为您提供内存,还可以为您提供任何其他系统属性。

我建议在应用程序的单独线程中实现简单的逻辑。这样大部分时间都会处于睡眠状态,几分钟内醒来一次,调用并将数据放入日志或网络。

获取内存ge通过编程方式从
/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;
}
#包括
#包括
int main()
{
std::ifstream statm(“/proc/self/statm”);
大小记忆虚拟、记忆rss、记忆共享;
statm>>mem_virt>>mem_rss>>mem_shared;

std::难道每台机器上的ps都有什么问题吗?@inetknght我只是对不得不到处解析整个东西的事实感到不太舒服;我只是在寻找更理智/更简单的东西。另一种可能是
free-m
,间隔一段时间;但我会检索整个ma的内存使用情况中文版,而且不仅仅是针对某些选定的进程。毕竟,我想不出比
ps
更好的方法了。最明智的方法是让应用程序在分布式资源管理器的控制下运行,如Sun Grid Engine、Torque、LSF、LoadLeveler、SLURM等。这些都带有内置的资源使用量表,可以聚合这些指标对于分布式作业中的每个进程。