Was kann ich finden Sie heraus, was mein Programm verursacht viel Speicher im Laufe der Zeit zu verbrauchen?

StackOverflow https://stackoverflow.com/questions/4395296

  •  10-10-2019
  •  | 
  •  

Frage

ich eine Anwendung haben POE verwendet, die etwa 10 Sitzungen tun verschiedene Aufgaben hat. Im Laufe der Zeit beginnen raubend die App mehr und mehr RAM und diese Nutzung noch nicht nach unten gehen, obwohl die App im Leerlauf 80% der Zeit ist. Meine einzige Lösung gegenwärtig ist, den Prozess oft neu zu starten.

ich meinen Code nicht erlaubt, hier zu posten, damit ich weiß, es ist schwierig, Hilfe zu bekommen, aber vielleicht kann mir jemand sagen, was ich selbst herausfinden kann?

War es hilfreich?

Lösung

Erwarten Sie nicht, die Prozessgröße zu verringern. Der Speicher ist nicht mit dem O, bis der Prozeß endet freigegeben zurück.

sagte, dass, können Sie Referenz Schleifen in Datenstrukturen irgendwo? AFAIK, der Perl-Garbage-Collector kann nicht aussortieren Referenzschleifen.

Verwenden Sie XS-Module überall? Es könnte Lecks innerhalb diejenigen sein versteckt.

Andere Tipps

Eine Vermutung: Ihr Programm führt eine Schleife, solange es läuft; in dieser Schleife kann es sein, dass sie Speicher für einen Puffer (oder mehr) jedes Mal eine bestimmte Bedingung auftritt, zuzuordnen; da der Umfang nie verlassen, bleibt der Speicher und wird nie aufgeräumt werden. Ich schlage vor, Sie überprüfen, für so etwas. Wenn dies der Fall ist, legen Sie die Zuweisung von Code in einem Unter, dass Sie aus der Schleife aufrufen und wo wird es Spielraum gehen, und erhalten aufgeräumt, bei der Rückkehr in die Schleife.

Sieht aus wie Test :: Valgrind ist ein Werkzeug für Speicherlecks zu suchen. Ich habe es selbst nie obwohl verwendet (aber ich habe schlicht valgrind mit C-Quelle).

Eine Technik besteht darin, in regelmäßigen Abständen den Inhalt von $ POE-Dump :: Kernel :: poe_kernel zu einer zeit- oder sequenz benannte Datei. $ Poe_kernel ist die Wurzel eines Baumes Spanning alle bekannten Sitzungen und den Inhalt ihrer Haufen. Die Snapshots sollten monoton wachsen, wenn der ausgetretene Speicher verwiesen wird. Sie werden in der Lage sein, um herauszufinden, was von diff'ing einen frühen Schnappschuss mit einem später einem undichten ist.

Sie können exportieren POE_ASSERT_DATA = 1 POE internen Datenkonsistenzprüfungen zu ermöglichen. Ich erwarte nicht, es zu Oberflächenproblemen, aber wenn es funktioniert würde ich sehr glücklich sein, einen Fehlerbericht zu erhalten.

Perl nicht Referenzringe lösen. Entweder Sie haben Zombies (die Sie über ps axl erkennen kann), oder Sie haben einen Speicherverlust (Referenzringe / Kreis)

Es gibt eine Tonne von Programmen Speicherlecks zu erkennen. strace, mtrace, Devel :: LeakTrace :: Schnell, Devel :: Zyklus

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top