Wie man ein Speicherleck in Ubuntu erkennt
Es gibt mehrere Gründe, warum unter Ubuntu ein Speicherverlust auftreten könnte, aber zum Glück ist es offensichtlich, wenn sie auftreten. Buggy-Code ist oft der Hauptgrund, da Programmierer möglicherweise nicht die Möglichkeit hatten, zu überprüfen, ob Speicher, der nicht mehr benötigt wird, freigegeben wird. Wenn Sie Unstable-Pakete installiert oder Quellcode kompiliert haben, gehen Sie aus diesem Grund möglicherweise mit Speicherlecks um. Sie werden sie wahrscheinlich bemerken, weil Software-Anwendungspakete sich darüber beschweren, dass sie nicht genügend Arbeitsspeicher haben, wenn Sie mehr als genug physischen RAM installiert haben.
Wenn Sie Bedenken wegen eines Speicherverlusts haben, versuchen Sie, free mehrmals in ein Terminal einzugeben. Wenn Sie plötzlich feststellen, dass RAM schnell wächst, haben Sie bereits ein Speicherleck entdeckt. Sollten Sie einen Fehler erhalten, der etwas wie bash liest: Nicht genug Speicher dabei und Sie haben nichts als ein Terminal oder sogar nur eine virtuelle Konsole geöffnet, dann sind Sie fast zweifellos mit einem zu tun. Einige Speicherlecks können etwas subtiler sein, aber Ubuntu und seine verschiedenen Spin-Offs verfügen über Werkzeuge und Pakete, mit denen Sie diese erkennen können.
Speicherlecks in Ubuntu erkennen
Da die zum Erkennen von Speicherverlusten verwendeten Tools hauptsächlich auf der CLI-Eingabeaufforderung basieren, spielt es keine Rolle, auf welcher Ubuntu-Version sie ausgeführt werden. Diese sollten innerhalb eines Unity-Terminals in regulärem Ubuntu funktionieren, von einer virtuellen Konsole in Ubuntu Server, von einem Lxterm in Lubuntu, einer Konsole in Kubuntu oder sogar innerhalb von Xfce in Xubuntu. Versuchen Sie, eine einfache Aufgabe wie sudo -s auszuführen und geben Sie Ihr Passwort ein, um zu beginnen.
Dies sollte Ihnen eine root-Shell bringen, wenn sie korrekt ausgeführt wird, aber möglicherweise einen Speicherfehler verursacht, 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 einfach echo 3> / proc / sys / m / drop_caches ein, drücken Sie die Eingabetaste und geben Sie exit ein. Versuche, frei oder frei zu laufen, um zu sehen, ob das zur Speicherfreigabe beigetragen hat.
Einige Programmierer argumentieren, dass es keinen Sinn macht, den Kernel dazu zu zwingen, seine Caches zu löschen, da sie geleert werden sollten und somit zurückgewonnen werden müssen, sobald zusätzlicher physischer Speicher benötigt wird. Diese Caches werden zwar die Systemleistung beeinträchtigen, Sie sollten jedoch berücksichtigen, dass dies nur ein Test ist. Sobald Sie das System neu gestartet haben, sollte der Linux-Kernel die Speicher-Caches wieder so zusammenstellen, wie sie ursprünglich waren.
Einige Leute haben vorgeschlagen, die Zeilensynchronisierung hinzuzufügen; sudo echo 3> / proc / sys / vm / drop_caches zu einem Skript, das Cron konsistent ausführt, aber dies verhindert den Zweck der Zwischenspeicherung von Speicher an erster Stelle. Freier Speicher selbst ist lediglich ungenutzter RAM, und das bedeutet, dass Daten von viel langsamerem elektromechanischem geladen werden müssen
Sollte Ubuntu Ihnen einen ungewöhnlichen Fehler bei top geben, versuchen Sie stattdessen, busybox top auszustellen, um auf eine noch einfachere Version dieses Programms zuzugreifen. Wenn Sie eine Liste haben, sehen Sie sich die Spalte% MEM oder ähnlich an, um zu sehen, welche Anwendungen den meisten Speicher zugewiesen bekommen. Während Sie die PID notieren und einen Kill-Befehl für die genaue Nummer der PID ausgeben können, wird dadurch lediglich das Schließen der Anwendung erzwungen. Die Erinnerung, die sie benutzen, wird vielleicht immer noch nicht veröffentlicht, obwohl es sich natürlich lohnt.
PRO TIPP: Wenn das Problem bei Ihrem Computer oder Laptop / Notebook auftritt, sollten Sie versuchen, die Reimage Plus Software zu verwenden, die die Repositories durchsuchen und beschädigte und fehlende Dateien ersetzen kann. Dies funktioniert in den meisten Fällen, in denen das Problem aufgrund einer Systembeschädigung auftritt. Sie können Reimage Plus herunterladen, indem Sie hier klickenWenn Sie eine Anwendung finden, die viel Speicher belegt, drücken Sie q, um zu beenden, und versuchen Sie dann, #### mit der PID-Nummer aus dem vorherigen Bildschirm zu beenden. Systemprozesse sollten nicht auf diese Weise gelöscht werden, noch sollte etwas, das Sie nicht gespeichert haben, funktionieren. Stellen Sie sich das ähnlich vor, indem Sie etwas mit der Aufgabenliste Strg + Alt + Entf löschen, die Sie auch für diesen Prozess verwenden können.
Wenn Sie ein Programm gefunden haben, mit dem dies konsistent geschieht, können Sie es so konfigurieren, dass das Verhalten in Zukunft verhindert wird. Natürlich wird jedes einzelne Programm einen anderen Weg einschlagen müssen, als nur Speicherlecks zu erkennen.
Sollten Sie nicht nur Anwendungen analysieren, sondern auch mit Code arbeiten, gibt es noch ein paar andere Möglichkeiten. Ubuntu und seine Derivate bieten Ihnen die C-Routinen Membrier, Memusage und Memusagestat für die Programmierung.
Verwenden Sie einfach man membrier, 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 immer hier beschrieben.
Wenn Sie grafischen Inhalt benötigen, bietet memusagestat sogar die Möglichkeit, eine grafische Darstellung der Speicherbelegung in einer PNG-Datei zu speichern. Dies macht es zu einem attraktiven Feature für Autoren von Dienstprogrammen, da es verwendet werden kann, um Anwendungen zu erstellen, die regelmäßig nach Speicherlecks suchen.
Sie können auch memprof installieren, ein Tool zum Profilieren der Speicherbelegung, das Ihnen hilft, Speicherlecks zu finden. Es erzeugt ein Profil, 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 aufweisen. Dazu wird eine Bibliothek vorab geladen, um die Speicherzuordnungsfunktionen der Standard-C-Bibliothek zu überschreiben.
Wenn Sie dies verwenden möchten, entfernen Sie die Zeile include meprof am Anfang des Codes, 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 packen und in einem Repository veröffentlichen.
PRO TIPP: Wenn das Problem bei Ihrem Computer oder Laptop / Notebook auftritt, sollten Sie versuchen, die Reimage Plus Software zu verwenden, die die Repositories durchsuchen und beschädigte und fehlende Dateien ersetzen kann. Dies funktioniert in den meisten Fällen, in denen das Problem aufgrund einer Systembeschädigung auftritt. Sie können Reimage Plus herunterladen, indem Sie hier klicken