WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Out of Memory

 

Snowdog
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 12.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2010, 10:10     Titel: Out of Memory
  Antworten mit Zitat      
Hallo erst mal.

Ich habe ein Problem mit meinem Speicher.
Und zwar habe ich ein GUI geschrieben, welches auch gut funktioniert.

Mein Problem ist jetzt wenn ich das GUI aufrufe füllt sich mein Speicher.

Wenn ich es jetzt schließe leert sich mein Speicher aber nicht mehr.

Fazit: Bei jedem Aufruf des GUIs füllt sich mein Speicher bis das er "überläuft". Egal ob ich es wieder schließe oder nicht.

Ich kann das Problem bisher nur so lösen, indem ich mein MATLAB zwischendurch schließe und wieder neu starte. Dann ist der Speicher wieder soweit leer.

Hat jemand ne idee woran das liegen könnte? bzw eine Lösungsmöglichkeit?

Gruß
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.09.2010, 10:38     Titel:
  Antworten mit Zitat      
Hallo,

das ist ungewöhnlich. Normalerweise ist ein komplexes Programm aus Funktionen zusammengesetzt, und beim Verlassen einer Funktion wird der Speicher wieder freigegeben.
Zudem kannst du Variablen manuell mit clear löschen.

Mehr kann ich dir ohne genauere Kenntnis des Codes nicht weiterhelfen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Snowdog
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 12.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2010, 11:03     Titel:
  Antworten mit Zitat      
Also ich habe ein GUI ohne GUIDE geschrieben. Wenn ich es starte kann ich über einen Button eine Zeit starten. Ist diese abgelaufen werden verschiedene Funktionen nacheinander abgearbeitet. Die erste Funktion bekommt ein Image zur Verfügung gestellt und nachdem alle Funktionen durchgelaufen sind wird ein verändertes Image angezeigt sowie Daten in Form mehrerer Cells im workspace ausgegeben. Es sind insgesamt 38 Cells, welche alle 9 einzelne Zellen beinhalten. Die ersten 6 Zellen beinhalten einen Skalar, Zelle 7 und 8 einen Vektor mit 5 Elementen und Zelle 9 eine Matrix (5x65 double). Die Daten werden bei jedem Durchlauf der Zeit wieder überschrieben. Also gibt es hier keinen "Überlauf". Alle Funktionsübergreifenden Daten werden mit handles übergeben.

Schließe ich das GUI und starte es danach neu ist der Speicherbedarf von 317MB auf 410MB angewachsen. Beim nächsten mal auf 520MB. Nachdem ich clear all eingegeben habe brauch ich immer noch 516MB.

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Linus
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 69
Anmeldedatum: 30.08.10
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 06.09.2010, 18:28     Titel:
  Antworten mit Zitat      
1. Hilft das hier auch nicht?
Code:


2. Kannst du rausfinden, wo der Speicher hin ist, z.B. mit
Code:
?
Private Nachricht senden Benutzer-Profile anzeigen
 
Snowdog
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 12.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.09.2010, 19:59     Titel:
  Antworten mit Zitat      
Code:


löscht mir zwar alle Variablen aber der Speicher bleibt trotzdem voll (bis auf die 2MB weniger von den Variablen

Code:


Das bringt kein Ergebnis, da ich ja alle Variablen vorher gelöscht habe, es werden also kein Speicher für Variablen belegt

Hat noch jemand eine Idee bzw. kann jemand mal öfters sein GUI ausführen und wieder schließen und sein Speicher mit memory überprüfen.

Danke für jede Antwort!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.09.2010, 22:21     Titel:
  Antworten mit Zitat      
Hallo Snowdog,

MEMORY zeigt an, wieviel Speicher Matlab verwendet. Bist Du aber auch sicher, dass dieser Speicher belegt ist?
Was geschieht nach PACK?
Was geschiet, wenn Du eine große Matrix definierst, z.B. mit RAND(1, 1e7)?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Snowdog
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 12.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.09.2010, 16:30     Titel:
  Antworten mit Zitat      
Also wenn ich das GUI oft genug (ca. 20 mal) öffne, ausführe und schließe, wird das GUI beim nächsten ausführen abgebrochen und im command window erscheint "Out of memory. Type HELP MEMORY for your options". Wenn ich nun "memory" eingebe erscheint

Maximum possible array: 20MB (2.139e+007 bytes) *
Memory available for all arrays: 249MB (2.614e+008 bytes) **
Memory used by MATLAB: 1537MB (1.612e+009 bytes)
Physical Memory (RAM): 2038MB (2.137e+009 bytes)

* Limited by contiguous virtual adress space available.
** Limited by virtual adress space available

Das Programm wird also abgebrochen da Memory used by MATLAB zuviel verwendet.

Wenn ich "clear all" eingebe löschen sich zwar alle meine Variablen aber Memory used by MATLAB sinkt nur um 10MB und Memory available for all arrays steigt somit um 10MB. Mein Problem bleibt natürlich erhalten.

Bei Pack wird der Speicher den ich mit MATLAB brauche auch nur unwesentlich kleiner.

Die Matrize kann jetzt natürlich auch nicht erzeugt werden. Ich bekomme wieder die Fehlermeldung Out of Memory

Die einzige Lösung die ich bis jetzt habe ist MATLAB neu zu starten.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.09.2010, 14:55     Titel:
  Antworten mit Zitat      
Hallo Snowdog,

ok. Dann gibt es in Deinem Programm Memoryleaks. Rufst Du irgendwelche Mex-Funktionen auf, die vielleicht per malloc Speicher besorgen und nicht wieder zurück geben?
Code:

Sind die GUIs vielleicht nur unsichtbar, aber nicht gelöscht? Dann würde dies etwas finden:
Code:

Hast Du PERSISTENT Variablen in LOCKed M-Files gespeichert? Die kann CLEAR auch nicht entsorgen.

Viel Erfolg beim Suchen! Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Snowdog
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 12.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2010, 08:08     Titel:
  Antworten mit Zitat      
Hallo Jan,

Bei

Code:


bekomme ich als Antwort

M = 'workspacefunc'
'imformats'
'mltimerpackage'

Mex = Empty cell array: 0-by-1

Daraus schließe ich das hierdurch kein Speicher belegt ist.

Wenn ich

Code:


bekomme ich als Antwort

ans = Empty matrix: 0-by-1

Daraus schließe ich das hierdurch kein Speicher belegt ist.

Jetzt muss du mir nur noch erklären was PERSISTENT Variablen in LOCKed M-Files sind. Das hab ich noch nie gehört.

Gruß Snowdog
Private Nachricht senden Benutzer-Profile anzeigen
 
gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.05.2011, 15:03     Titel:
  Antworten mit Zitat      
ich habe leider das selbe problem, gibt es noch tips?
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.05.2011, 16:13     Titel:
  Antworten mit Zitat      
Hallo gast
Zitat:
ich habe leider das selbe problem, gibt es noch tips?

Das ist eine sehr allgemeine Frage. Es gibt jede Menge Tipps, aber Snowdogs Problem wurde dadurch ausgelöst, dass er nicht herausfand, wer seinen Arbeitsspeicher belegt. Die Lösung ist es, diese Stelle zu finden - die wird aber bei Dir wohl eine ganz andere sein!

Man kann z.B. aus Versehen 100.000 Timer-Objekte erstellen, oder Java-Button erstellen und ihre Callback-Pointer ins Nirvana zeigen lassen, oder hunderte andere Dinge.

Bitte poste irgendwelche Details.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.05.2011, 10:34     Titel:
  Antworten mit Zitat      
ich glaube mein süezielles Problem liegt in der Erzeugung einer cell Variablen. Dies mache ich über deine for Schleife

Code:

for j=1:c-1
        Korr{1,j}=num2cell(height);

        ...

end
 
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.