測量分佈式應用程序的內存使用情況的最佳方法是什麼?測量分佈式應用程序的內存使用情況
我不知道,如果每臺機器上使用ps
是對這個問題的最好辦法 - 在更穩健的解決方案,更好的(:
PS:應用程序在c++
,並且將被執行。使用linux
測量分佈式應用程序的內存使用情況的最佳方法是什麼?測量分佈式應用程序的內存使用情況
我不知道,如果每臺機器上使用ps
是對這個問題的最好辦法 - 在更穩健的解決方案,更好的(:
PS:應用程序在c++
,並且將被執行。使用linux
有一個叫alleyoop內存檢查程序(它使用的valgrind LIB),可以監視程序我建議您檢查了這一點:http://alleyoop.sourceforge.net/
您可以使用
cat /proc/PROC_PID/smaps
爲了得到你的進程使用的所有內存頁面的細節。但是,您沒有指示內存是真正使用還是僅保留。還有
pmap -x PROC_ID, doing similar work.
最後,還有
cat/proc/PROC_ID/status | grep Vm
給你關於你的程序中使用的所有存儲器類型的信息。
我會建議在你的應用程序的單獨線程中實現簡單的邏輯。大部分時間都會睡覺,在幾分鐘內醒來一次,撥打電話mallinfo,並將該數據記錄到網絡或網絡。
爲了讓內存使用編程方式,從/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,其中描述了這三種類型的含義。
每臺機器上的ps有什麼問題? – inetknght 2013-05-13 16:36:50
@inetknght我對於不得不解析整個事物的事實並不是很舒服,我只是在尋找更多的東西*更安心/更容易*。另一種可能性是「免費-m」,間隔一段時間;但我會檢索整個機器的內存使用情況,而不僅僅是一些選定的進程。畢竟,我想不出比'ps'好。 – Rubens 2013-05-13 18:48:43
最簡單的方法是讓應用程序在分佈式資源管理器(如Sun Grid Engine,Torque,LSF,LoadLeveler,SLURM等)的控制下運行。這些內置資源使用度量工具可彙總每個進程的度量標準在分佈式工作中。 – 2013-05-14 21:43:44