[Gelöst] Speicherfreigabe unter 0.18 + neu STL /STEP import Pobleme

In diesem Forum Fragen und Diskussionen in Deutsch
Forum rules
Foren-Regeln und hilfreiche Informationen

WICHTIG: Bitte zuerst lesen, bevor Sie posten
User avatar
roerich_64
Posts: 719
Joined: Thu May 21, 2015 7:00 pm

[Gelöst] Speicherfreigabe unter 0.18 + neu STL /STEP import Pobleme

Postby roerich_64 » Mon Mar 25, 2019 2:45 pm

Moin,

Die letzten Tage bin ich dabei einen Rollcontainer mit Schubladen zu zeichnen und dazu die Fräsbahnen.

Was mit aufgefallen ist, das FreeCad Speicher nicht wieder freigibt...
SpeicherFreigabe.jpg
SpeicherFreigabe.jpg (547.82 KiB) Viewed 532 times

Erst wenn ich FreeCAD komplett beende, wird der benutzte Speicher wieder freigegeben.

Hat jemand einen Rat?
Einen Befehl per Python-Console vielleicht?

VG
Walter

Edit:
OS: Windows 7
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.18.16093 (Git)
Build type: Release
Branch: releases/FreeCAD-0-18
Hash: 690774c0effe4fd7b8d2b5e2fb2b8c8d145e21ce
Python version: 3.6.6
Qt version: 5.6.2
Coin version: 4.0.0a
OCC version: 7.3.0
Locale: German/Germany (de_DE)
Last edited by roerich_64 on Tue Apr 02, 2019 12:37 pm, edited 1 time in total.
User avatar
Gift
Posts: 462
Joined: Tue Aug 18, 2015 10:08 am
Location: Germany, Sauerland

Re: Speicherfreigabe unter 0.18

Postby Gift » Mon Mar 25, 2019 7:10 pm

Hallo Walter,

du kannst mal versuchen die Müllabfuhr zu rufen. https://de.wikipedia.org/wiki/Garbage_Collection

Code: Select all

import gc
gc.collect()
Der Garbage Collector beinhaltet auch einige Helfer zum debuggen. https://docs.python.org/3.6/library/gc.html

Wenn du in einer reinen C++ WB arbeitest, könnte es ein verstecktes Speicherleck sein. Es gibt/gab im Bug-Tracker auch einen Eintrag, dass die Draft-Workbench bei jeden neuen Aufruf wieder Speicher reserviert. Hast du ein Beispiel?

Gruß
Benjamin
User avatar
roerich_64
Posts: 719
Joined: Thu May 21, 2015 7:00 pm

Re: Speicherfreigabe unter 0.18

Postby roerich_64 » Mon Mar 25, 2019 7:35 pm

Hallo Benjamin,

Beispiel hier:
back.FCStd
(396.69 KiB) Downloaded 10 times
Hmm, hab gerade einen Job korrigiert und bin dann rüber zur Fräse und die Teile gefräst.
Hatte FreeCAD mit der Datei offen gelassen. Als ich nach etwa 30min wieder kam war der Speicher voll... :roll:

VG
Walter
User avatar
roerich_64
Posts: 719
Joined: Thu May 21, 2015 7:00 pm

Re: Speicherfreigabe unter 0.18

Postby roerich_64 » Mon Mar 25, 2019 8:34 pm

So, hab ein wenig rum gespielt in der Path-WB mit den Befehlen von Benjamin vorgeschlagen.

Zuerst ohne eine geladene Datei.
Dann die Datei geladen, bisschen mit den 'Sichtbarkeiten' gespielt
Und die Datei wieder geschlossen.

Code: Select all

Python 3.6.6 | packaged by conda-forge | (default, Jul 26 2018, 11:48:23) [MSC v.1900 64 bit (AMD64)] on win32
Type 'help', 'copyright', 'credits' or 'license' for more information.
>>> import FreeCAD
>>> FreeCAD.open(u"C:/Users/XXXXXX/Documents/3_Zeichnungen/0_Global/01_Haus_A/01_EG/5_Werkstatt_klein/02_Einzelteile/04_Roll_Container/03_Assembies/V3/back.FCStd")
>>> App.setActiveDocument("back")
>>> App.ActiveDocument=App.getDocument("back")
>>> Gui.ActiveDocument=Gui.getDocument("back")
>>> Gui.getDocument("back").getObject("Pocket_Shape").Visibility=True
>>> App.closeDocument("back")
>>> App.setActiveDocument("")
>>> App.ActiveDocument=None
>>> Gui.ActiveDocument=None
>>> import gc
>>> gc.collect()
0
>>> gc.garbage
[]
>>> gc.DEBUG_COLLECTABLE
2
>>> gc.DEBUG_UNCOLLECTABLE
4
>>> gc.get_count()
(26, 0, 0)
>>> gc.get_threshold()
(700, 10, 10)
>>> gc.enable()
>>> gc.collect()
0
>>> 
>>> gc.collect(generation=2)
0
>>> gc.get_stats()
[{'collections': 258, 'collected': 514, 'uncollectable': 0}, {'collections': 23, 'collected': 56, 'uncollectable': 0}, {'collections': 5, 'collected': 12, 'uncollectable': 0}]
>>> import FreeCAD
>>> FreeCAD.open(u"C:/Users/XXXXXX/Documents/3_Zeichnungen/0_Global/01_Haus_A/01_EG/5_Werkstatt_klein/02_Einzelteile/04_Roll_Container/03_Assembies/V3/back.FCStd")
>>> App.setActiveDocument("back")
>>> App.ActiveDocument=App.getDocument("back")
>>> Gui.ActiveDocument=Gui.getDocument("back")
>>> gc.get_stats()
[{'collections': 258, 'collected': 514, 'uncollectable': 0}, {'collections': 23, 'collected': 56, 'uncollectable': 0}, {'collections': 5, 'collected': 12, 'uncollectable': 0}]
>>> gc.DEBUG_STATS
1
>>> gc.set_threshold(1,1,1)
>>> gc.get_stats()
[{'collections': 368, 'collected': 514, 'uncollectable': 0}, {'collections': 78, 'collected': 56, 'uncollectable': 0}, {'collections': 5, 'collected': 12, 'uncollectable': 0}]
>>> Gui.getDocument("back").getObject("Cut003").Visibility=True
>>> Gui.SendMsgToActiveView("ViewFit")
>>> Gui.getDocument("back").getObject("Pocket_Shape").Visibility=True
>>> Gui.getDocument("back").getObject("Cut003").Visibility=False
>>> Gui.getDocument("back").getObject("Job").Visibility=True
>>> Gui.getDocument("back").getObject("Pocket_Shape").Visibility=False
>>> Gui.getDocument("back").getObject("Profile_Faces").Visibility=False
>>> Gui.getDocument("back").getObject("DogboneDressup001").Visibility=False
>>> Gui.getDocument("back").getObject("Contour").Visibility=False
>>> Gui.getDocument("back").getObject("Job").Visibility=False
>>> Gui.getDocument("back").getObject("Body").Visibility=True
>>> Gui.getDocument("back").getObject("Body001").Visibility=True
>>> Gui.getDocument("back").getObject("Body002").Visibility=True
>>> Gui.getDocument("back").getObject("Body003").Visibility=True
>>> Gui.getDocument("back").getObject("Pocket_Shape").Visibility=True
>>> Gui.getDocument("back").getObject("DogboneDressup").Visibility=True
>>> Gui.getDocument("back").getObject("Profile_Faces").Visibility=True
>>> Gui.getDocument("back").getObject("DogboneDressup001").Visibility=True
>>> Gui.getDocument("back").getObject("Contour").Visibility=True
>>> gc.get_stats()
[{'collections': 4502, 'collected': 514, 'uncollectable': 0}, {'collections': 2145, 'collected': 56, 'uncollectable': 0}, {'collections': 5, 'collected': 12, 'uncollectable': 0}]
>>> gc.get_stats()
[{'collections': 5030, 'collected': 514, 'uncollectable': 0}, {'collections': 2409, 'collected': 56, 'uncollectable': 0}, {'collections': 5, 'collected': 12, 'uncollectable': 0}]
>>> gc.get_stats()
[{'collections': 5256, 'collected': 514, 'uncollectable': 0}, {'collections': 2522, 'collected': 56, 'uncollectable': 0}, {'collections': 5, 'collected': 12, 'uncollectable': 0}]
>>> gc.get_stats()
[{'collections': 5515, 'collected': 514, 'uncollectable': 0}, {'collections': 2651, 'collected': 56, 'uncollectable': 0}, {'collections': 5, 'collected': 12, 'uncollectable': 0}]
>>> gc.get_stats()
[{'collections': 5866, 'collected': 514, 'uncollectable': 0}, {'collections': 2826, 'collected': 56, 'uncollectable': 0}, {'collections': 5, 'collected': 12, 'uncollectable': 0}]
>>> gc.get_stats()
[{'collections': 6163, 'collected': 514, 'uncollectable': 0}, {'collections': 2975, 'collected': 56, 'uncollectable': 0}, {'collections': 5, 'collected': 12, 'uncollectable': 0}]
>>> gc.get_objects()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ReferenceError: Cannot print representation of deleted object
>>> 
>>> gc.DEBUG_COLLECTABLE
2
>>> gc.DEBUG_UNCOLLECTABLE
4
>>> gc.get_stats()
[{'collections': 9176, 'collected': 514, 'uncollectable': 0}, {'collections': 4482, 'collected': 56, 'uncollectable': 0}, {'collections': 6, 'collected': 12, 'uncollectable': 0}]
>>> App.getDocument("back").save()
>>> App.closeDocument("back")
>>> App.setActiveDocument("")
>>> App.ActiveDocument=None
>>> Gui.ActiveDocument=None
>>> gc.get_stats()
[{'collections': 10102, 'collected': 514, 'uncollectable': 0}, {'collections': 4945, 'collected': 56, 'uncollectable': 0}, {'collections': 6, 'collected': 12, 'uncollectable': 0}]
>>> 
>>> gc.get_stats()
[{'collections': 10158, 'collected': 514, 'uncollectable': 0}, {'collections': 4973, 'collected': 56, 'uncollectable': 0}, {'collections': 6, 'collected': 12, 'uncollectable': 0}]
>>> 
>>> gc.get_stats()
[{'collections': 10316, 'collected': 514, 'uncollectable': 0}, {'collections': 5051, 'collected': 56, 'uncollectable': 0}, {'collections': 6, 'collected': 12, 'uncollectable': 0}]
>>> gc.get_objects()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ReferenceError: Cannot print representation of deleted object
>>> 
>>> gc.get_stats()
[{'collections': 12498, 'collected': 514, 'uncollectable': 0}, {'collections': 6143, 'collected': 56, 'uncollectable': 0}, {'collections': 6, 'collected': 12, 'uncollectable': 0}]
>>> 

Was hat das zu bedeuten? :

Code: Select all

>>> gc.get_objects()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ReferenceError: Cannot print representation of deleted object
user1234
Posts: 190
Joined: Mon Jul 11, 2016 5:08 pm

Re: Speicherfreigabe unter 0.18

Postby user1234 » Mon Mar 25, 2019 8:40 pm

Hallo!

Diesbezüglich gabe es schon mal diskussionen. Meistens stellte sich heraus, dass das der Speicher für die Rückgängigfunktion war. Stell diesen mal aus oder auf eins und schau mal ob der Speicher immernoch ständig steigt.

Grüße
user
Attachments
01.png
01.png (117.18 KiB) Viewed 465 times
User avatar
roerich_64
Posts: 719
Joined: Thu May 21, 2015 7:00 pm

Re: Speicherfreigabe unter 0.18

Postby roerich_64 » Mon Mar 25, 2019 8:52 pm

@User1234:

Hatte ich auf 50...
Jetzt runter auf 20

Ich schau mal ;)
reox
Posts: 666
Joined: Sat Aug 13, 2016 10:06 am
Contact:

Re: Speicherfreigabe unter 0.18

Postby reox » Tue Mar 26, 2019 7:57 am

Gift wrote:
Mon Mar 25, 2019 7:10 pm

Code: Select all

import gc
gc.collect()
Meistens (>98% der Fälle) bringt dir der Aufruf des GC in python genau nichts, da insbesondere mit modernen Versionen die Referenzen korrekt getracked werden.
Python hat zudem eine Eigenheit allokierten Speicher nicht mehr herzugeben, nach dem Motto: "Wenn du das einmal gebraucht hast, brauchst du es sicher bald wieder". daher bringt es bei sowas nur was den Interpreter neu zu starten.
User avatar
roerich_64
Posts: 719
Joined: Thu May 21, 2015 7:00 pm

Re: Speicherfreigabe unter 0.18 + neu STL /STEP import pobleme

Postby roerich_64 » Tue Apr 02, 2019 2:15 am

Moin Freunde des fröhlichen Zeichnens :)

Mit Hilfe von Klaus @kbwbe haben wir hier https://forum.freecadweb.org/viewtopic. ... 60#p298461
und folgend herausgefunden das meine FC Installation wohl irgendwie krank ist :roll: 8-)

Nachdem ich diese Version
OS: Windows 7
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.18.16093 (Git)
Build type: Release
Branch: releases/FreeCAD-0-18
Hash: 690774c0effe4fd7b8d2b5e2fb2b8c8d145e21ce
Python version: 3.6.6
Qt version: 5.6.2
Coin version: 4.0.0a
OCC version: 7.3.0
Locale: German/Germany (de_DE)
installiert habe, sind die Fehler angefangen.
Das schlimmste aktuell ist, das der Import von STP Dateien und STEP Dateien alle vier Kerne der CPU bis zum Anschlag nutzen und unverhältnismäßig lange dauert.

Tja, da brauche ich eure Hilfe. Ich hänge hier einen DB9_Stecker als STEP an.
Bitte testet den kurz, indem ihr diesen in eine neue Datei importiert. Bin gespannt, was bei euch rauskommt.
Und bitte postet auch eure Versionsinformationen dazu.
COM DB-9 male.STEP
(516.59 KiB) Downloaded 21 times
Vielen Dank im vorraus
Walter
chrisb
Posts: 19594
Joined: Tue Mar 17, 2015 9:14 am

Re: Speicherfreigabe unter 0.18

Postby chrisb » Tue Apr 02, 2019 4:50 am

Hast Du schon mal die Config-Dateien zurückgesetzt?
freecad-heini-1
Posts: 6002
Joined: Tue Jan 07, 2014 11:10 am
Contact:

Re: Speicherfreigabe unter 0.18 + neu STL /STEP import pobleme

Postby freecad-heini-1 » Tue Apr 02, 2019 4:54 am

roerich_64 wrote:
Tue Apr 02, 2019 2:15 am
Ping
Guten morgen Walter,
mit laufendem Freecad und importierer Step, 50% Speicherauslastung:

Code: Select all

OS: Ubuntu 18.04.2 LTS
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.18.16093 (Git)
Build type: Release
Branch: releases/FreeCAD-0-18
Hash: 690774c0effe4fd7b8d2b5e2fb2b8c8d145e21ce
Python version: 2.7.15rc1
Qt version: 5.9.5
Coin version: 4.0.0a
OCC version: 7.3.0
Locale: German/Germany (de_DE)
sytstemauslastung_com_db_9_male.png
sytstemauslastung_com_db_9_male.png (64.95 KiB) Viewed 304 times
Freecad beendet, Rechner neu gestartet:
sytstemauslastung_com_db_9_male_v2.png
sytstemauslastung_com_db_9_male_v2.png (70.08 KiB) Viewed 298 times
Viele Grüße
Wilfried