So erkennen Sie einen Speicherverlust in Ubuntu

Es gibt mehrere Gründe, warum unter Ubuntu ein Speicherverlust auftreten kann, aber zum Glück ist es offensichtlich, wann sie auftreten. Buggy-Code ist oft der Hauptgrund, da Programmierer möglicherweise nicht die Möglichkeit hatten, zu überprüfen, ob nicht mehr benötigter Speicher freigegeben wird. Wenn Sie instabile Pakete installiert oder Code aus dem Quellcode kompiliert haben, haben Sie möglicherweise aus diesem Grund mit Speicherlecks zu tun. Sie werden sie wahrscheinlich bemerken, weil Softwareanwendungspakete anfangen, sich über zu wenig Arbeitsspeicher zu beschweren, wenn Sie mehr als genug physischen RAM installiert haben.

Wenn Sie über einen Speicherverlust besorgt sind, geben Sie wiederholt frei in ein Terminal ein. Wenn Sie plötzlich feststellen, dass die RAM-Nutzung schnell zunimmt, haben Sie bereits einen Speicherverlust festgestellt. Sollten Sie eine Fehlermeldung erhalten, die so etwas wie Bash lautet: Nicht genügend Speicher, während Sie dies tun, und Sie haben nur ein Terminal oder sogar nur eine virtuelle Konsole geöffnet, dann haben Sie es zweifellos mit einer zu tun. Einige Speicherlecks können etwas subtiler sein, aber Ubuntu und seine verschiedenen Spin-offs bieten Tools und Pakete, mit denen Sie diese erkennen können.

Erkennen von Speicherlecks in Ubuntu

Da die zum Erkennen von Speicherlecks verwendeten Tools hauptsächlich auf der CLI-Eingabeaufforderung basieren, spielt es keine Rolle, auf welcher Ubuntu-Version Sie sie ausführen. Diese sollten in einem Unity-Terminal in regulärem Ubuntu, von einer virtuellen Konsole in Ubuntu Server, von einem lxterm in Lubuntu, einer Konsole in Kubuntu oder sogar in Xfce in Xubuntu einwandfrei funktionieren. Versuchen Sie, eine einfache Aufgabe wie sudo -s auszuführen, und geben Sie zunächst Ihr Passwort ein.

Dies sollte Ihnen bei korrekter Ausführung eine Root-Shell geben, kann jedoch einen Speicherfehler verursachen, wenn Sie mit einem Leck arbeiten, das bereits zu weit gegangen ist. Wenn Sie tatsächlich auf eine Root-Shell zugreifen können, geben Sie echo 3> / proc / sys / m / drop_caches ein, drücken Sie die Eingabetaste und geben Sie exit ein. Versuchen Sie erneut, free oder free -m auszuführen, um festzustellen, ob dadurch Speicher freigegeben wird.

Einige Programmierer argumentieren, dass es keinen Sinn macht, den Kernel zu zwingen, seine Caches zu löschen, da sie geleert und somit zurückgefordert werden sollten, sobald zusätzlicher physischer Speicher benötigt wird. Beachten Sie jedoch, dass dies nur ein Test ist, während das erzwungene Leeren dieser Caches die Systemleistung beeinträchtigt. Nach dem Neustart des Systems sollte der Linux-Kernel die Speicher-Caches wieder so zusammenstellen, wie sie ursprünglich waren.

Einige Leute haben vorgeschlagen, die Zeilensynchronisation hinzuzufügen. sudo echo 3> / proc / sys / vm / drop_caches zu einem Skript, das cron konsistent ausführt, aber dies macht den Zweck des Speicher-Caching in erster Linie zunichte. Der freie Speicher selbst ist lediglich unbenutzter RAM, und das bedeutet, dass Daten aus einer viel langsameren elektromechanischen Methode geladen werden müssen oder NAND-Speichergeräte. Unabhängig davon, wie schnell diese Geräte sind, sind sie nicht so schnell wie RAM. Dies bedeutet, dass Sie zwar Speicherlecks beheben sollten, das Cache-System jedoch nicht manipulieren sollten, sobald Sie es auf die optimale Einstellung eingestellt haben.

Wenn Sie festgestellt haben, dass tatsächlich ein konsistenter Speicherverlust auftritt, der während der Verwendung Ihres Computers regelmäßig auftritt und nicht speziell eingegrenzt werden kann, Sie jedoch weiterhin über CLI-Zugriff verfügen, führen Sie den Befehl top aus. Dies sollte Ihnen eine Liste der laufenden Prozesse geben.

Sollte Ubuntu Ihnen einen ungewöhnlichen Fehler bezüglich top geben, versuchen Sie stattdessen, Busybox Top auszugeben, um auf eine noch einfachere Version dieses Programms zuzugreifen. Wenn Sie eine Liste haben, sehen Sie in der Spalte% MEM oder ähnlich nach, welchen Anwendungen der meiste Speicher zugewiesen ist. Während Sie die PID notieren und einen Kill-Befehl für die genaue Nummer der PID ausgeben können, wird die Anwendung lediglich zum Schließen gezwungen. Der von ihnen verwendete Speicher wird möglicherweise immer noch nicht freigegeben, obwohl dies natürlich einen Versuch wert ist.

Wenn Sie eine Anwendung finden, die viel Speicher benötigt, drücken Sie q, um das Programm zu beenden, und versuchen Sie dann, #### mit der PID-Nummer aus dem vorherigen Bildschirm zu beenden. Systemprozesse sollten nicht auf diese Weise abgebrochen werden, und nichts, in dem Sie nicht gespeichert haben, sollte funktionieren. Stellen Sie sich dies ähnlich vor, als würden Sie etwas mit der Aufgabenliste Strg + Alt + Entf beenden, die Sie auch für denselben Prozess verwenden können.

Wenn Sie ein Programm gefunden haben, mit dem dies ständig geschieht, können Sie es konfigurieren, um das Verhalten in Zukunft zu verhindern. Natürlich benötigt jedes einzelne Programm einen anderen Rückgriff, der über die bloße Erkennung von Speicherlecks hinausgeht.

Wenn Sie nicht nur Anwendungen beheben, sondern auch tatsächlich mit Code arbeiten, stehen Ihnen einige andere Möglichkeiten zur Verfügung. Ubuntu und seine Derivate bieten Ihnen die Routinen membarrier, memusage und memusagestat C für die Programmierung.

Verwenden Sie einfach man membarrier, man memusage oder man memusagestat, um die Seiten des Linux-Programmierhandbuchs zu diesen wichtigen Routinen anzuzeigen. Wenn es in zukünftigen Versionen der Bibliotheken Upgrades gibt, wenn neue Versionen von Ubuntu herauskommen, werden die Änderungen hier immer beschrieben.

Wenn Sie grafischen Inhalt benötigen, bietet memusagestat sogar die Möglichkeit, eine grafische Darstellung der Speichernutzung in einer PNG-Datei zu speichern. Dies macht es auch für Autoren von Dienstprogrammen zu einer attraktiven Funktion, da damit Anwendungen erstellt werden können, die regelmäßig auf Speicherlecks prüfen.

Möglicherweise möchten Sie auch memprof installieren, ein Tool zum Profilieren der Speichernutzung, um Sie beim Auffinden von Speicherlecks zu unterstützen. Es wird ein Profil erstellt, das angibt, wie viel Speicher jede Funktion in einem Programm, das Sie schreiben, zuweist. Es kann auch vorhandenen Speicher durchsuchen, um Blöcke zu finden, die zugewiesen wurden, aber keine echten Referenzen mehr enthalten. Dazu wird eine Bibliothek vorgeladen, um die Speicherzuweisungsfunktionen der Standard-C-Bibliothek zu überschreiben.

Wenn Sie dies verwenden möchten, müssen Sie die Zeile include memprof am Anfang Ihres Codes entfernen, bevor Sie sie freigeben. Dies wird verwendet, um sicherzustellen, dass Sie keine Lecks haben, aber es sollte keine Abhängigkeit werden, wenn Sie Ihren Code verpacken und in einem Repository freigeben.

Similar Posts

Leave a Reply

Your email address will not be published.