测量分布式应用程序的内存使用情况的最佳方法是什么?
我不确定ps
在每台机器上使用是否是解决这个问题的最佳方法——解决方案越理智越好(:
PS:应用程序在 中c++
,将使用linux
.
测量分布式应用程序的内存使用情况的最佳方法是什么?
我不确定ps
在每台机器上使用是否是解决这个问题的最佳方法——解决方案越理智越好(:
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;
}
我猜您最感兴趣的是resident memory size,即程序现在可以访问多少 RAM。请参阅ServerFault 的回答,其中描述了这三种类型的含义。
我建议在应用程序的单独线程中实现简单的逻辑。它大部分时间都在睡觉,几分钟后醒来一次,调用mallinfo并将该数据放入日志或网络。
有一个名为 alleyoop 的内存检查器应用程序(它使用 valgrind 库)可以监控程序。我建议检查一下:http ://alleyoop.sourceforge.net/
您可以使用
cat /proc/PROC_PID/smaps
为了获取您的进程使用的所有内存页面的详细信息。但是,您不知道内存是真正使用还是只是保留。还有
pmap -x PROC_ID, doing similar work.
最后,有
cat/proc/PROC_ID/status | grep Vm
为您提供有关程序使用的所有内存类型的信息。