AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Memory Leak bei virtuellem Speicher

Ein Thema von Pittus · begonnen am 11. Nov 2008 · letzter Beitrag vom 13. Nov 2008
Antwort Antwort
Pittus

Registriert seit: 11. Nov 2008
Ort: Ravensburg
2 Beiträge
 
#1

Memory Leak bei virtuellem Speicher

  Alt 11. Nov 2008, 10:09
Hallo,

ich habe folgendes Problem:
meine Anwendung verbraucht sowohl physikalischen als auch virtuellen Speicher. Der physikalische wird immer in einem Block wieder freigegeben während der virtuelle Verbrauch irgendwann zum Absturz führt.
Ich hatte das Problem früher auch schon, konnte aber dann durch ordentliches Leeren von strings dieses Leak wieder schließen. Damals hat es genügt, bei allen Records und Objekten, die freigegeben werden, die strings auf '' zu setzten.

Jetzt wohl nicht mehr. Und deswegen bin ich im Moment ziemlich ratlos.

Gibt es sonst noch bekannte Ursachen für diesen Effekt?

Gruß
Pittus
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Memory Leak bei virtuellem Speicher

  Alt 11. Nov 2008, 10:13
Zitat von Pittus:
meine Anwendung verbraucht sowohl physikalischen als auch virtuellen Speicher.


Zitat von Pittus:
Der physikalische wird immer in einem Block wieder freigegeben während der virtuelle Verbrauch irgendwann zum Absturz führt.



Zitat:
Und deswegen bin ich im Moment ziemlich ratlos.
Ich grad auch. Aber ich würde mal behaupten, dass du irgendwelche Objekte nicht freigibst. I.A. wird hier zu FastMM geraten.

Und den Unterschied zwischen physikalischem und virtuellen und linearen usw. usf. Speicher solltest du dir nochmal ansehen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#3

Re: Memory Leak bei virtuellem Speicher

  Alt 11. Nov 2008, 10:14
Gegenfrage: Wie kann man eigentlich unter Programmkontrolle angeben, welche Speicherart man gerne hätte?



Sherlock
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Memory Leak bei virtuellem Speicher

  Alt 11. Nov 2008, 11:31
Zitat von Sherlock:
Gegenfrage: Wie kann man eigentlich unter Programmkontrolle angeben, welche Speicherart man gerne hätte?



Sherlock
Nur in begrenztem Umfang und es ist auch in den allermeisten Fällen nicht sinnvoll, sich da explizit drum zu kümmern. Windows hält immer möglichst viel realen Speicher frei indem gerade nicht benutzte Speicherseiten in den virtuellen Speicher (Swapfile) ausgelagert werden. Wenn eine Anwendung also ein Speicherleck hat und große Mengen "toter" Objekte anlegt, dann fängt Windows früher oder später an, die nie benutzten Speicherbereiche in denen diese Objekte liegen, auszulagern. FastMM im Full Debug Mode nutzen und rausfinden wo die Lecks sind.
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Memory Leak bei virtuellem Speicher

  Alt 11. Nov 2008, 12:16
Zitat von Sherlock:
Gegenfrage: Wie kann man eigentlich unter Programmkontrolle angeben, welche Speicherart man gerne hätte?
Nur indem man es selbst implementiert, oder eine Speicherverwaltung verwendet, die selbiges unterstützt.

Notwendig/interessant ist dies nur in wenigen Fällen... Um ein praktisches Beispiel zu nennen: Eine Klasse in einer Anwendung fordert mehrere hunderttausend kleine Speicherbereiche an (zum Beispiel Dateinamen). Nutzt diese Klasse den Standard-Heap der Anwendung, dann wird es - trotz Freigabe aller Speicherbereiche - zur Heap-Fragmentierung kommen. Diese ungenutzten "Lücken" im Heap können im Laufe der Zeit dazu führen, dass für eine Anforderung eines größeren Blocks kein zusammenhängender freier Speicherbereich gefunden wird. Es steht also theoretisch genug freier Speicher zur Verfügung, aber nicht genug für große Blöcke. Wenn dies alles zutrifft, dann kann man darüber nachdenken, für diese "Liste" einen eigenen Heap zu verwenden, der anschließend komplett freigegeben werden kann.

Topic: Für records gibt es Finalize (System.pas).
  Mit Zitat antworten Zitat
Pittus

Registriert seit: 11. Nov 2008
Ort: Ravensburg
2 Beiträge
 
#6

Re: Memory Leak bei virtuellem Speicher

  Alt 13. Nov 2008, 16:20
Hallo,
vielen Dank für eure Antworten und Anregungen.

Das Problem scheint gelöst und die Lösung könnte für andere auch interessant sein.

Die Ursache lag in der Komponente TIdTCPServer, die ich auf einem Datenmodul hatte. Ich arbeite viel mit den Indy-TCP-Komponenten und hatte bisher keine Probleme damit (im Gegenteil!). Diese Komponente hatte jedoch offensichtlich einen "Schuss". Nachdem ich die Komponente gelöscht habe und sie beim Programmstart als Objekt erzeuge (und eben nicht auf dem Datenmodul platziere) ist mein Speicher stabil. Das war die einzige Änderung.

Ich kann mir das zwar nicht erklären aber ich hatte bereits solche Effekte beim TdxTreeList und anderen komplexeren Komponenten. Da hat es aber meist genügt, die Komponente runterzuschmeißen und neu abzulegen. Diesmal nicht, wahrscheinlich hätte ich das Datenmodul neu erzeugen müssen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz