Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi "Nicht genug Arbeitsspeicher" - aber noch 600MB Frei?! (https://www.delphipraxis.net/146916-nicht-genug-arbeitsspeicher-aber-noch-600mb-frei.html)

Sereby 29. Jan 2010 10:41


"Nicht genug Arbeitsspeicher" - aber noch 600MB Fr
 
Hiho,

ich habe in meinem Programm MadExcept eingebaut und das ruft automatisch ein php script auf was die Bugreports auf meinen FTP hochlädt, da die meisten user zu faul sind die hochzuladen bzw zu posten...

Und dabei habe ich heute nen sonderbaren bugreport erhalten:
Zitat:

date/time : 2010-01-29, 10:57:20, 750ms
computer name : ...
user name : ... <admin>
registered owner : ...
operating system : Windows XP Service Pack 3 build 2600
system language : German
system up time : 56 minutes 3 seconds
program up time : 38 minutes 27 seconds
processors : 2x AMD Athlon(tm) 64 X2 Dual Core Processor 6000+
physical memory : 605/2046 MB (free/total)
free disk space : (E:) 38,34 GB
display mode : 1280x1024, 32 bit
process id : $9d8
allocated memory : 1,89 GB
executable : ...
exec. date/time : 2010-01-08 18:00
version : ...
compiled with : Delphi 2009
madExcept version : 3.0k
callstack crc : $79688c38, $0a140e98, $9200c7d2
exception number : 4
exception class : EOutOfMemory
exception message : Zu wenig Arbeitsspeicher.
wie man daran sehen kann meckert er, dass er angeblih zu wenig arbeitspeicher besitzt allerdings sieht man auch dass noch 605MB frei zur verfügung stehen!?

Meine frage ist nun wie das sein kann und wie man grundsätzlich solche Probleme umgehen kann. eigentlich müsste er ja auch anfangen in die Auslagerungsdatei zu schreiben wenn der Arbeitsspeicher voll ist und nicht einfach ne exeption werfen...

gibts möglichkeiten das abzufangen?

MfG Sereby

Bernhard Geyer 29. Jan 2010 10:44

Re: "Nicht genug Arbeitsspeicher" - aber noch 600M
 
Der (Freie) physikalische Speicher ist sch.... Egal. Dein prozess kann ohne spezielle Anpassung nur 2 GB haben.
Und MadExpert schreibt ja:

Zitat:

allocated memory : 1,89 GB
Also bist du hier schon am Anschlag. Und wenn du nun einen größeren Block anforderst kann es vorkommen das dieser in deinem pysikalischen Adressraum nicht an einem Stück verfügbar ist!

mkinzler 29. Jan 2010 10:47

Re: "Nicht genug Arbeitsspeicher" - aber noch 600M
 
Was macht den dein Program, wenn es einen solchen Speicherbereich anfordert?

Sereby 29. Jan 2010 10:50

Re: "Nicht genug Arbeitsspeicher" - aber noch 600M
 
hab ich auch gerade gesehn dass der da knapp 2GB zugewiesen hat.
Das mit der 2GB grenze wiss ich auch und das erklärts natürlich.

Die frage ist jedoch wie er das geschafft hat auf 1,89GB zu kommen.... Speicherlecks habe ich nicht drin da ich auch FastMM4 benutze und das alles schon Monate lang durchgetestet habe in allen möglichen Szenarien :-/
Zur frage was es macht: Lädt Hotfixes (2000, XP, 2003, Vista, 7) in den arbeitsspeicher, analysiert diese und wenn die analyse abgeschlossen ist werden die nötigen infos ausm speicher geworfen und am ende alles zusammengewürfelt und ein großes update aus allen ausgewählten erstellt. Beim erstellen wird ebenfalls alles in den arbeitsspeicher geladen da das wesentlich schneller ist als den ganzen mist erstmal auf die HDD zu entpacken. Normal ist ein verbrauch von 60 - 100MB + zwischendurch die größe des Hotfixes der aber nach dem analysieren wieder freigegeben wird!

Wie kann man den zugewiesenen Arbeitsspeicher des eigenen Programms denn bestimmen?
Dann frage ich den ab und zu mal ab und werf ne entsprechende Information.

MfG Sereby

Bernhard Geyer 29. Jan 2010 10:51

Re: "Nicht genug Arbeitsspeicher" - aber noch 600M
 
Zitat:

Zitat von mkinzler
Was macht den dein Program, wenn es einen solchen Speicherbereich anfordert?

Vermutlich Speicherlücken produzieren :-) bzw. viele Objekte als Onwer das Formular angeben so das man nicht merkt das man versteckte Speicherlücken hat.

mkinzler 29. Jan 2010 10:53

Re: "Nicht genug Arbeitsspeicher" - aber noch 600M
 
Zitat:

Zitat von Bernhard Geyer
Zitat:

Zitat von mkinzler
Was macht den dein Program, wenn es einen solchen Speicherbereich anfordert?

Vermutlich Speicherlücken produzieren :-) bzw. viele Objekte als Onwer das Formular angeben so das man nicht merkt das man versteckte Speicherlücken hat.

Ich dachte an die hauptsächliche Aufgabe der Anwendung

himitsu 29. Jan 2010 10:53

Re: "Nicht genug Arbeitsspeicher" - aber noch 600M
 
Und dann gibt es noch das Problem der Speicherdefragmentierung im Delphi-SpeicherManager.

Von FastMM könnte man sich diesbezüglich mal den Speicherstatus und MemoryMap ansehn.

Sereby 29. Jan 2010 10:55

Re: "Nicht genug Arbeitsspeicher" - aber noch 600M
 
wie gesagt ich verwende FastMM4 als Speichermanager.
Speicherlecks habe ich keine drin sonst würde FastMM ja rummeckern wenn ich es Debugge.
Und solch einen ernormen verbrauch habe ich noch nie gehabt. Das geht nur wenn er eine Datei die mehrere GB groß ist versucht einzulesen..+aber das programm läuft schon 30 min etwa und daher is das nich möglich weil das schon zu fanfang dann sein muss

edit:
hmmmmmm.. der typ hat er alles reingeballter an updates was so existiert... quer beet durch o.O"
muss ich bei mir nochmal genauer prüfen!

dennoch wüsste ich gerne wie man den zugewiesenen arbeitsspeicher der eigenen anwendung auslesen kann

himitsu 29. Jan 2010 11:07

Re: "Nicht genug Arbeitsspeicher" - aber noch 600M
 
Wieviel Speicher sollte da eigentlich reserviert werden?
Das konnte ich nirgendwo rauslesen.

Sereby 29. Jan 2010 11:15

Re: "Nicht genug Arbeitsspeicher" - aber noch 600M
 
generell wird nicht viel "reserviert" je nach hotfixgröße wird ersmal der gesammte fix eingelesen und wenn das auslesen fertig ist wird das wieder freigegeben.
das was übrig bleibt ist ne .inf datei die z.B. bei IE8 etwa 1,7MB groß ist.. bei normalen updates ist die allerdings nur so 27KB.
sehr unterschiedlich das ganze.
Der typ hat allerdings über 600 Updates versucht zu bündeln und da echt alles quer beet durchgewürfelt :-/

Das komische ist als ich versucht hab bei mir knapp 1000 updates zu bündeln war alles im grünen bereich und keinerlei exceptions oder derartige speicherzuweisungen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:49 Uhr.
Seite 1 von 2  1 2      

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