[OpenWalnut-Dev] mystisches Speicherproblem

Alexander Wiebel wiebel_openwalnut at dergrosse.de
Fri Jun 22 16:40:47 CEST 2012


Dear Patrick,
unfortunately I do not have a solution at this time. However, I had
similar problems with my glyph module and the isosurface module in the
past (#425 in the old issue track in the trac system).

> #425	Memory leak in isosurface and Teem Glyphs
> 
> Description	
> It is believed that the memory leak does not come from inside the
> modules but more from the WGEGroupNode or somewher else.
> At least for Teem Glyphs this is very sure. ebaum also had the idea
that it might com from Qt.

I just checked the isosurface and I (still) can find the memory growing
when adding and removing the module and playing with the "isovalue"
slider in between.

Cheers,
Alex

On 06/22/2012 04:03 PM, Patrick Oesterling wrote:
> Hallo OW-Developer,
> 
> da es meine erste Nachricht ist, zunächst ein großes Lob an alle
> Verantwortlichen, die OW in seinen heutigen Zustand gebracht haben. Es
> macht mir gewissermaßen "Spaß", meine bisherige Arbeit damit zu
> implementieren.
> 
> Ich bin leider auf ein ziemlich merkwürdiges Speicherproblem im OW
> gestoßen, welches dazu führt, dass der RAM überläuft (auf allen Rechnern
> die ich getestet habe). Da ich mit Sebastian bereits vergeblich eine
> ganze Menge Zeit investiert habe, hoffe ich nun, dass evtl von euch
> jemand eine Ahnung/Idee hat, was genau hier (theoretisch) "schief" läuft.
> 
> 
> Auf folgende Weise kann das Szenario schnell und einfach reproduziert
> werden:
> 
> 
> [ 1) OW auschecken ]
> 
> 2) als private member im Template-Modul in der WMTemplate.h folgendes
> deklarieren
> 
> std::vector< std::vector< double > > m_matrix;
> 
> 3) in der moduleMain() in der WMTemplate.cpp beim m_aTrigger event (ca.
> line: 629) folgendes einfügen
> 
> int size = 0;
> std::cin >> size;
> 
> // free old matrix ( just to be sure )
> m_matrix.clear();
> m_matrix.resize( 0 );
> std::vector< std::vector< double > >().swap( m_matrix );
> m_matrix = std::vector< std::vector< double > >();
> 
> // allocate new (triangle) matrix
> for( int i = 0; i < size; ++i )
>     m_matrix.push_back( std::vector< double >( i + 1, 0.0 ) );
> 
> 4) OW starten - trigger auslösen - 30000 eingeben
> 
> 5) mit "top" (linux command) oder "gnome-system-monitor" beobachten, wie
> der RAM um ca. 4 GB steigt
> 
> jetzt zum Problem:
> 
> 6) trigger erneut auslösen - 30 (oder irgendwas << 30000) eingeben und
> beobachten, wie der Speicher der member variablen -NICHT- komplett
> wieder freigegeben wird.
> 
> Scheinbar willkürlich wird von den 4GB mal mehr oder weniger (laut
> "top") wieder freigegeben, oder leider auch mal gar nichts. Richtig
> unangenehm wird die Geschichte, weil nach mehrmaligen Auslösen des
> Triggers sogar ein Vielfaches des Speichers belegt wird (bis der RAM
> halt voll ist) ( -> einfach zweimal mit halber RAM-Größe auslösen, um es
> zu beschleunigen).
> 
> Dass "top" etwas falsches anzeigt, scheidet meiner Meinung nach aus,
> weil a.) letztendlich tatsächlich geswapt wird (obwohl es nur eine
> Instanz geben sollte) und weil b.) folgender "helloWorld" Ansatz
> einwandfrei funktioniert (laut "top"):
> 
> ---------------------------
> 
> #include <iostream>
> #include <vector>
> 
> int main()
> {
>   std::vector< std::vector< double > > matrix;
> 
>   int size = 0;
>   while( true)
>   {
>     std::cin >> size;
> 
>     if( size == 0)
>         break;
> 
>     // free matrix
>     std::vector< std::vector < double > >().swap( matrix );
> 
>     // allocate matrix
>     for( int i = 0; i < size; ++i )
>         matrix.push_back( std::vector< double >( i+1, 0.0 ) );
>   }
> }
> 
> ---------------------------
> 
> Falls einer von euch eine Ahnung hat, was im OW (threading, libraries,
> etc) dafür verantwortlich sein könnte, oder ob hier prinzipielle Dinge
> verantwortlich sind, wäre ich sehr dankbar. Angeblich existiert auch nur
> immer eine Instanz eines Moduls (hier: des Template Moduls).
> 
> 
> Folgendes habe ich außerdem probiert:
> 
> 1.) alle Einzelfälle bei "free memory" (siehe oben)
> 2.) boost::shared_ptr< std::vector< std::vector< double > > > m_matrix
> 3.) helloWorld Ansatz mit Klassen-member und boost::threads ( "top"
> zeigt weiterhin korrekt an)
> 4.) helloWorld Ansatz mit Klassen-member und Funktionalität in extra
> library ( "top" zeigt weiterhin korrekt an)
> 
> 
> Vielen Dank schonmal.
> Patrick
> _______________________________________________
> OpenWalnut-Dev mailing list
> OpenWalnut-Dev at lists.informatik.uni-leipzig.de
> http://lists.informatik.uni-leipzig.de/mailman/listinfo/openwalnut-dev
> 
> Archive: http://lists.informatik.uni-leipzig.de/pipermail/openwalnut-dev/



More information about the OpenWalnut-Dev mailing list