4 Stimmen

Die Speichernutzung einer verteilten Anwendung messen

Was ist der beste Weg, um den Speicherverbrauch einer verteilten Anwendung zu messen?

Ich bin mir nicht sicher, ob die Verwendung von ps auf jedem Rechner der beste Ansatz für dieses Problem ist - je vernünftiger die Lösung, desto besser (:

P.S.: Die Anwendung ist in c++ und soll unter Verwendung von linux ausgeführt werden.

4voto

Andrew Alcock Punkte 18981

Installieren Sie eines der wirklich guten Open-Source-Tools zur Überwachung von Rechenzentren. Gute sind:

Diese sind unglaublich einfach zu installieren und liefern Ihnen nicht nur Informationen über den Speicher, sondern auch über jede andere Systemeigenschaft, die Sie sich vorstellen können.

3voto

Ilia K. Punkte 4572

Um den Speicherverbrauch programmgesteuert zu erhalten, lesen Sie aus /proc/self/statm:

#include 
#include 

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 << "Speicherstatistiken:" << std::endl <<
                     "Virtuelle Speichergröße:  " << mem_virt   << std::endl <<
                     "Residente Speichergröße: " << mem_rss    << std::endl <<
                     "Geteilter Speichergröße:   " << mem_shared << std::endl;
        return 0;
}

Ich nehme an, Sie sind hauptsächlich an der residenz Speichergröße interessiert, also wie viel RAM dem Programm gerade zur Verfügung steht. Sehen Sie sich eine Antwort von ServerFault an, die die Bedeutung dieser drei Typen beschreibt.

1voto

Nikolay Viskov Punkte 1016

Ich würde vorschlagen, eine einfache Logik in einem separaten Thread Ihrer Anwendung zu implementieren. Dieser Thread schläft die meiste Zeit, wacht alle paar Minuten auf, ruft mallinfo auf und speichert diese Daten in ein Log oder Netzwerk.

0voto

Christopher Bales Punkte 1071

Es gibt eine Memory-Checker-App namens alleyoop (die die Valgrind-Bibliothek verwendet), die ein Programm überwachen kann. Ich empfehle, dies auszuchecken: http://alleyoop.sourceforge.net/

0voto

delehef Punkte 671

Sie können

cat /proc/PROC_PID/smaps 

verwenden, um die Details aller Speicherseiten abzurufen, die von Ihrem Prozess verwendet werden. Allerdings erhalten Sie keine Angabe darüber, ob der Speicher wirklich verwendet oder nur reserviert ist. Es gibt auch

pmap -x PROC_ID, das ähnliche Arbeit verrichtet.

Schließlich gibt es

cat/proc/PROC_ID/status | grep Vm 

das Ihnen Informationen über alle Speichertypen liefert, die von Ihrem Programm verwendet werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X