Python - Speicherverlust
Ich arbeite an der Lösung des ein memory leak in meinem Python-Anwendung.
Hier ist das Ding - es ist wirklich nur scheint zu passieren, auf Windows Server 2008 (nicht R2), nicht jedoch in früheren Versionen von Windows, und es ist auch nicht so Aussehen, wie es passiert unter Linux (obwohl ich nicht getan habe, fast so viel testen auf Linux).
Beheben, es richte ich das Debuggen kann auf dem garbage-collector:
gc.set_debug(gc.DEBUG_UNCOLLECTABLE | gc.DEBUG_INSTANCES | gc.DEBUG_OBJECTS)
Dann, in regelmäßigen Abständen, ich log den Inhalt von gc.Müll.
Sache ist die, gc.Müll ist immer leer, doch meine Speicherauslastung steigt und steigt und steigt.
Sehr rätselhaft.
- Dave, klar, dein problem kann behoben werden durch das entfernen der Linie 123.... und fügen Sie ein i=1 in Zeile 27...
- im ernst, ich denke, um Ihnen zu helfen benötigen wir einige code..
- Semi-doppelte (oder eine interessante Threads zum Lesen für dich): stackoverflow.com/questions/1435415/python-memory-leaks/... (wenn dies nicht gelingt, kommen Sie zurück mit den details)
- Verwenden Sie die gleiche python version auf beiden Systemen?
- lassen Sie mich sehen, wenn ich das richtig verstanden habe, fragte Sie eine Frage, so dass kein code ein und beantwortet Ihre eigene Frage, indem Sie sagen, Sie verändert Ihren code, während immer noch keinen code... ist das richtig? du weißt, ich habe nur sehr wenige Punkte, aber Sie bekommen ein Daumen nach unten für diese shinola...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn es nie einen Müll in gc.Müll, dann bin ich nicht sicher, was Sie versuchen zu tun, durch die Aktivierung von GC-debugging. Sicher, es wird Ihnen sagen, welche Objekte gelten für die Bereinigung, aber das ist nicht besonders interessant, wenn Sie am Ende mit keine Zirkelbezüge, dass kann nicht gereinigt werden.
Wenn Ihr Programm immer mehr Speicher je nach Betriebssystem, gibt es grundsätzlich vier verschiedene Fälle im Spiel:
gc
- Modul (in der Regel, weil einer von Ihnen hat eine__del__
Methode.)Ihrer Beschreibung, es klingt wie es 's unwahrscheinlich, dass #1 (wie es sich Verhalten würde das gleiche auf jedem OS) und offenbar nicht #2 entweder (da gibt' s nichts mehr im gc.Müll.) Bedenkt, #3, Windows (im Allgemeinen) eine Speicher Zuweisung, mit der der notorisch schlecht mit fragmentierten Zuteilungen, aber Python arbeitet, um dieses mit seinen
obmalloc
frontend fürmalloc()
. Es ist vielleicht noch ein Problem im Windows Server 2008-system-Bibliotheken, machen es Aussehen wie Ihre Anwendung mehr und mehr Speicher, aber. Oder es kann ein Fall von #4, einem C/C++ extension module, oder eine DLL verwendet, mit Python-oder ein Erweiterungsmodul, mit einem memory-leak.Im Allgemeinen, die erste Ursache für memory leaks in python finden Sie in C-Erweiterungen.
Verwenden Sie irgendwelche von Ihnen?
Außerdem, Sie sagen, das Problem tritt nur auf 2008, ich würde dann prüfen, Erweiterungen für Unvereinbarkeit, weil mit Vista und 2008 gab es ganz viele kleine änderungen, die verursacht Probleme auf diesem Feld.
Wie und alternative, versuchen Sie die Ausführung Ihrer Anwendung in der Windows-Kompatibilitätsmodus auswählen Windows XP - dies kann helfen, lösen das Problem, vor allem, wenn es um Veränderungen in der Sicherheit.