GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich die tatsächliche Speichernutzung einer Anwendung oder eines Prozesses messen?

Mit ps oder ähnlichen Tools erhalten Sie nur die Menge an Speicherseiten, die von diesem Prozess zugewiesen wurden. Diese Nummer ist korrekt, aber:

  • spiegelt nicht die tatsächliche Speichermenge wider, die von der Anwendung verwendet wird, sondern nur die dafür reservierte Speichermenge

  • kann irreführend sein, wenn Seiten geteilt werden, zum Beispiel von mehreren Threads oder durch die Verwendung von dynamisch verlinkten Bibliotheken

Wenn Sie wirklich wissen möchten, wie viel Speicher Ihre Anwendung tatsächlich verwendet, müssen Sie sie in einem Profiler ausführen. Beispielsweise kann Valgrind Ihnen Einblicke in die Menge des verwendeten Speichers geben und, was noch wichtiger ist, über mögliche Speicherlecks in Ihrem Programm. Das Heap-Profiler-Tool von Valgrind heißt 'massiv':

Massif ist ein Heap-Profiler. Es führt ein detailliertes Heap-Profiling durch, indem es regelmäßige Snapshots des Heaps eines Programms erstellt. Es erstellt ein Diagramm, das die Heap-Nutzung im Laufe der Zeit zeigt, einschließlich Informationen darüber, welche Teile des Programms für die meisten Speicherzuweisungen verantwortlich sind. Das Diagramm wird durch eine Text- oder HTML-Datei ergänzt, die weitere Informationen enthält, um festzustellen, wo der meiste Speicher zugewiesen wird. Massif führt Programme etwa 20-mal langsamer als normal aus.

Wie in der Valgrind-Dokumentation erklärt, müssen Sie das Programm über Valgrind ausführen:

valgrind --tool=massif <executable> <arguments>

Massif schreibt einen Dump von Momentaufnahmen der Speichernutzung (z. B. massif.out.12345 ). Diese bieten (1) eine Zeitleiste der Speichernutzung, (2) für jeden Snapshot eine Aufzeichnung darüber, wo in Ihrem Programm Speicher zugewiesen wurde. Ein großartiges grafisches Tool zum Analysieren dieser Dateien ist Massif-Visualizer. Aber ich habe ms_print gefunden , ein einfaches textbasiertes Tool, das mit Valgrind geliefert wird, bereits jetzt eine große Hilfe sein.

Um Speicherlecks zu finden, verwenden Sie den (Standard) memcheck Werkzeug von Valgrind.


Versuchen Sie es mit dem pmap-Befehl:

sudo pmap -x <process pid>

Linux
  1. Wie berechnet man die CPU-Auslastung eines Prozesses durch PID in Linux von C?

  2. Wie kann ich die Top-Prozesse nach tatsächlicher Speichernutzung sortiert anzeigen?

  3. Wie kann ich den absoluten Pfad eines laufenden Prozesses erfahren?

  4. Wie kann ich die Speichernutzung jedes Prozesses anzeigen, wenn ich ein 'ps -ef' mache?

  5. Wie kann die Nutzung des für den Kernel dedizierten Speichers überwacht werden?

Wie kann ich die Speichernutzung profilieren?

So geben Sie Hugepages aus der abgestürzten Anwendung frei

Wie können Sie den tatsächlichen Hardlink von ls sehen?

Wenn ich die PID-Nummer eines Prozesses kenne, wie erhalte ich seinen Namen?

Wie kann ich die Ausgabe einer Shell-Anwendung in Linux ausblenden?

Wie kann die Speichernutzung nach Anwendung in Linux begrenzt werden?