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

Etwas frisst den gesamten Speicher (ich vermute ein Speicherleck in einer App). Wie erkennt man was?

Lösung 1:

Ausführen von top im Batch-Modus, um Speichergrößen regelmäßig zu melden, kann verwendet werden, um zu sehen, wer den Speicher verwendet, wenn die Dinge schief gehen. Ausführen von sar im Stapelmodus sollte einige gute Diagnosen zur Speichernutzung und den zugehörigen E/A liefern. Ausführen von munin Um das System zu überwachen, sollten Sie ein Diagramm mit guten Details darüber erhalten, wofür der Speicher verwendet wird. Das kann sehr hilfreich sein.

Mit der Datei limited.conf können Sie die maximale Kerngröße von Programmen begrenzen. Richtig eingestellt, sollte dies alle Programme beenden, die Speicherlecks verursachen. Dies funktioniert mit dem Modul pam_limits. Mit dem ulimits können auch Limits gesetzt werden Befehl.

Sie führen einige Programme aus, die große Mengen an Speicher belegen könnten. Einige Dinge, die Sie sich ansehen könnten, umfassen.

  • Schlecht programmierte Anwendungen, die unter apache2 ausgeführt werden Speicher lecken kann. In diesem Fall sollte sich die Speichergröße erhöhen. Sie können Apache2 so einstellen, dass Kinder nach einer bestimmten Anzahl von Verwendungen wiederverwendet werden, indem Sie MaxRequestsPerChild einstellen auf 100 oder so. Wenn das Problem dadurch behoben wird, müssen Sie das Leck beheben. Ich würde mir das zuerst ansehen.
  • MySQL versucht möglicherweise, Daten in den Speicher zu laden. Wenn Sie viele Daten im Speicher haben, kann dies zu einigen Störungen führen, sollte jedoch nicht so dramatisch sein, wie Sie sehen.
  • Wenn Sie einen großen tmpfs haben Dateisystem gemountet wird, kann es zu Speicherlecks kommen, wenn Dateien bei der Verwendung nicht gelöscht werden. Große langlebige Dateien können ebenfalls ein Problem darstellen.
  • Wenn das Problem ungefähr zur gleichen Tageszeit auftritt, haben Sie möglicherweise ein geplantes Programm, das Speicher verliert.
  • Wenn Sie ein Programm haben, das gemeinsam genutzten Speicher zuweist, ihn aber vor dem Beenden nicht freigibt, haben Sie ein relativ unsichtbares Speicherleck. Wenn der gemeinsam genutzte Speicher im Speicher gesperrt ist, kann er das Auslagern erzwingen. Die Menge an verfügbarem gemeinsam genutztem Speicher ist normalerweise relativ begrenzt.
  • Das Liquidsoap+Icecast-Bundle könnte auf Pufferprobleme stoßen, die Arbeitsspeicher beanspruchen. Ich habe diese Kombination nicht verwendet, daher bin ich mir nicht sicher, wie dies aussehen würde.

Normale Speichernutzung:Freier Speicher ist nicht etwas, von dem Sie viel wollen. Wenn Ihr System schon lange in Betrieb ist und viel freien Speicher hat, stimmt etwas nicht. Jedes Mal, wenn Sie eine Datei lesen oder schreiben, werden die Blöcke in den Puffercache verschoben. Dadurch wird Ihr freier Speicher reduziert, und das ist gut so. Das System behält genügend freien Speicherplatz, um einige Programme zu starten, ohne woanders nach Speicher suchen zu müssen. Da viele Programme schnell ausgeführt werden, wird ihr Speicher an den freien Pool zurückgegeben, wenn sie nicht mehr ausgeführt werden.

Wenn Sie eine Datei lesen, die sich im Puffercache befindet, ist kein Festplattenzugriff erforderlich, und der Lesevorgang wird aus dem Puffercache aufgelöst. Schreibvorgänge verwenden einen ähnlichen Mechanismus. Wenn Ihr System Speicher benötigt, ist der Puffercache einer der ersten Orte, der verwendet wird. Die meisten Puffer können sofort freigegeben werden.

Wenn Sie ein Speicherleck haben, sehen Sie, dass sowohl freier Speicher als auch Puffer zu schrumpfen beginnen. Dies ist immer noch kein schwerwiegendes Problem, da der Speicherverlust schließlich in den Auslagerungsbereich verschoben werden sollte. Ihr System läuft weiterhin einwandfrei, bis Sie den Auslagerungsspeicher auffüllen und den verbleibenden freien Speicherplatz bis zu dem Punkt herunterziehen, an dem Programme nicht gestartet werden können. Es ist typisch, dass eine kleine Menge an Auslagerungsspeicher verwendet werden kann.

Lösung 2:

Sie können diesen Befehl verwenden, um die Top 10 Anwendungen in Bezug auf die RAM-Nutzung anzuzeigen:

ps -A --sort -rss -o comm,pmem | head -n 11

Manchmal hilft Ihnen dieser Befehl, wenn viele Unterprozesse generiert wurden:

ps auxf

So sehen Sie, welche Prozesse zusammengehören.

Lösung 3:

Nichts verwendet diesen Speicher wirklich in Bezug auf Anwendungen.

Sie müssen den 'gecachten' Wert abziehen, der den Seiten-Cache darstellt, um eine bessere Vorstellung davon zu bekommen, wie hoch Ihre tatsächliche Speichernutzung in Bezug auf die Programmnutzung ist.

Im Grunde ist dies eine gute Speicherverwaltung und das ist idealerweise das, was Sie wollen.

Siehe den Link hier für weitere Informationen:http://www.linuxatemyram.com/


Linux
  1. Wie erkennt man ein Speicherleck?

  2. So berechnen Sie die Speichernutzung in Linux mit sar, ps und free

  3. Wie protokolliere ich den Speicherverbrauch unter Linux?

  4. Linux:Finden Sie heraus, welcher Prozess den gesamten Arbeitsspeicher verwendet

  5. Wie bekomme ich % Speicherauslastung mit vmstat?

So überprüfen Sie die Speichernutzung in Linux

Wie wird die Top/htop-Speichernutzung interpretiert?

Woher wissen Sie, ob genügend Speicher frei ist, um eine neue Anwendung auf einem Linux-Computer bereitzustellen?

Wie lösche ich alle Dateien in einem Verzeichnis außer einigen?

Wie kann man unter Linux eine Aktion bei wenig Arbeitsspeicher auslösen?

Wie untersucht man ein Speicherleck mit Apache und PHP?