Ich habe ein (scheinbares) Speicherleck in einem Python-Skript, das ich nicht recht erklären kann (der residente Speicher wächst einfach weiter). Es begann mit ungefähr 6MB Resident, ich ließ es über Nacht laufen und es war auf über 200MB gekommen (ich tat das, um ein Sägezahnspeicher-Verwendungsmuster aufgrund von GC auszuschließen). Ich habe es auf dieses Skript reduziert:
%Vor%Ich dachte, das Problem könnte sein, dass ich einen neuen SSHClient instanziiere und sie irgendwie nicht rausgeworfen werden, aber diese Version verliert Speicher noch schneller!
%Vor%Wenn irgendjemand etwas dazu sagen könnte, oder wenn ich nur dumm bin und jemand darauf hinweisen kann, warum ich am dankbarsten wäre. Danke
Ich habe es geschafft zu reproduzieren. Bei der Untersuchung fand ich, dass das Leck höchstwahrscheinlich mit libssl verbunden ist, weil die Zuweisung zunimmt.
Vorher:
%Vor%Nach einiger Zeit:
%Vor%Scheint wie ein Fehler in libssl oder paramiko selbst, weil gc.garbage leer ist und len (gc.get_objects ()) konstant ist, was bedeutet, dass es keine unbreakable Zyklen und keine neuen Python-Objekte gibt (mit Ihrer ersten Version) / p>
Übrigens können Sie gc.collect () bei jeder Iteration ausführen, um den Sägezahn zu vermeiden.
Scheint, dass mindestens ein anderer Benutzer kürzlich auf Paramikos IRC gestoßen ist; Ich habe ein Ticket erstellt, um es hier zu verfolgen: Ссылка - leider habe ich keine Weisheit, um mich als dieses Niveau zu teilen Problem ist nicht eins, ich habe Erfahrung mit der Fehlersuche.
In diesen Tagen treffe ich das gleiche Problem. Ich denke, das ist der Fehler der lib. Zur gleichen Zeit ist Ihre Verwendung nicht korrekt. Das Schlüsselproblem ist, dass Sie die Schlüsseldatei nicht definiert haben. Gemäß dem AutoAddPolicy-Quellcode:
%Vor%Sie können den Richtlinienhandler in WarningPolicy ändern oder selbst ein leeres Handle definieren. wie:
%Vor%