2013-02-21 100 views
4

測量分佈式應用程序的內存使用情況的最佳方法是什麼?測量分佈式應用程序的內存使用情況

我不知道,如果每臺機器上使用ps是對這個問題的最好辦法 - 在更穩健的解決方案,更好的(:

PS:應用程序在c++,並且將被執行。使用linux

+0

每臺機器上的ps有什麼問題? – inetknght 2013-05-13 16:36:50

+0

@inetknght我對於不得不解析整個事物的事實並不是很舒服,我只是在尋找更多的東西*更安心/更容易*。另一種可能性是「免費-m」,間隔一段時間;但我會檢索整個機器的內存使用情況,而不僅僅是一些選定的進程。畢竟,我想不出比'ps'好。 – Rubens 2013-05-13 18:48:43

+2

最簡單的方法是讓應用程序在分佈式資源管理器(如Sun Grid Engine,Torque,LSF,LoadLeveler,SLURM等)的控制下運行。這些內置資源使用度量工具可彙總每個進程的度量標準在分佈式工作中。 – 2013-05-14 21:43:44

回答

4

安裝幾個非常好的開源企業數據中心監控工具之一。好的是:

以下是安裝並給你不僅記憶非常容易,而且任何其他系統屬性,你可以在搖一棒。

0

您可以使用

cat /proc/PROC_PID/smaps 

爲了得到你的進程使用的所有內存頁面的細節。但是,您沒有指示內存是真正使用還是僅保留。還有

pmap -x PROC_ID, doing similar work. 

最後,還有

cat/proc/PROC_ID/status | grep Vm 

給你關於你的程序中使用的所有存儲器類型的信息。

1

我會建議在你的應用程序的單獨線程中實現簡單的邏輯。大部分時間都會睡覺,在幾分鐘內醒來一次,撥打電話mallinfo,並將該數據記錄到網絡或網絡。

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,其中描述了這三種類型的含義。

相關問題