Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Steigender Speicherbedarf

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Steigender Speicherbedarf (1073 mal gelesen)
dragon67
Mitglied
Projektleiter Lichttechnik

Sehen Sie sich das Profil von dragon67 an!   Senden Sie eine Private Message an dragon67  Schreiben Sie einen Gästebucheintrag für dragon67

Beiträge: 3
Registriert: 03.07.2009

XP 64; Catia 64 Bit
Quadcore 8GB RAM

erstellt am: 03. Jul. 2009 10:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,
zunächst möchte ich mich vorstellen. Mein Name ist Bernd und ich komme aus Reutlingen. Ich bin im Bereich der Licht-Simulation tätig und beschäftige mich seit einiger Zeit mit der Programmierung von Tools in diesem Bereich.
Momentan arbeite ich an einem großen Projekt, bei dem in Catia ca. 34000 Varianten eines optischen Systems getestet werden sollen.
Dazu habe ich ein entsprechendes parametrisiertes Modell erstellt und die Parameter mit einer Designtable verknüpft.
Mein Makro lädt nun zunächst eine Konfiguration, und macht auf das Produkt einen Update. Danach wird eine Simulation in SPEOS (Optiksoftware in Catia integriert) ausgeführt und das Simulationsergebnis abgespeichert. Anschließend beginnt die Schleife mit der nächsten Konfiguration u.s.w.
Das funktioniert auch alles ganz gut so. Nur leider habe ich festgestellt, dass CATIA pro Durchlauf immer etwas mehr Speicher belegt. Und so bricht das Programm nach einigen Stunden aufgrund von Speichermangel ab. Ich habe das auf mehreren Rechnern und Catia-Versionen (32bit und 64bit) getestet. Früher oder später immer mit dem selben Ergebnis.
Um die Rechenzeiten zu verkürzen laufen auf der Quadcore-Maschine 4 Makros gleichzeitig (ca.1,5Min pro Durchlauf). Eigentlich sollte der Rechner mehrere Tage am Stück durchlaufen um die Aufgabe in endlicher Zeit zu lösen.

Gibt es also eine Möglichkeit den Speicherbedarf von Catia zu reduzieren. Ich erzeuge ja keine neuen Geometrien also sollte der Speicherbedarf eigentlich konstant bleiben. Wer kann mir da weiterhelfen??

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Florian Held
Mitglied
Teamleiter CAD-Solutions


Sehen Sie sich das Profil von Florian Held an!   Senden Sie eine Private Message an Florian Held  Schreiben Sie einen Gästebucheintrag für Florian Held

Beiträge: 81
Registriert: 07.09.2006

erstellt am: 03. Jul. 2009 11:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für dragon67 10 Unities + Antwort hilfreich

Hi,

auch wenn sich das Problem sehr spezifisch ist und ich nur raten kann vielleicht hilft es dir ja:

Wenn mein Rechner aus sicht des Speicherbedarfs in die Knie geht da ich seit längerem an einer Konstruktion arbeite schließe ich alle geöffneten Dokumente und lade meine Konstruktion mal eben so neu.

Wenn ich dich richtig verstehe veränderst du Geometrien mittels Konstruktionstabelle bzw. Parametern um deine Varianten zu erzeugen. Also auch wenn du nicht wirklich Geometrien erzeugst veränderst du diese ständig weshalb hierdurch auch entsprechend (zumindest etwas) Speicherbedarf entsteht. Dies erklärt auch warum der Speicher ständig wächst.

Beim schließen der Dokumente werden die meisten Daten aus dem Speicher entladen und beim erneuten öffnen dieser "frisch befüllt".

Allerdings:
Je nach Konstruktionsgröße dauert mein "mal eben neu laden der Konstruktion" ohne Chachemodus (bringt die ja nichts da du die Daten verändern musst) schon mal gut ne viertel Stunde bei ner 2-3GB großen Konstruktion (Speicherbedarf HDD). Größere Konstruktionen entsprechend noch länger. Kommt also darauf an wie groß deine zu ladende Modelle und wie oft du den Speicher (nach x Varianten) leerräumen möchstest.

Kurzum meine Idee für dich:
Alle X Berechnungsdurchläufe alle geöffneten Dokumente der Catia-Sitzung schließen und neu öffnen, anschließend bei der nächsten Berechnung weitermachen.

------------------
MfG,
Florian Held

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 03. Jul. 2009 11:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für dragon67 10 Unities + Antwort hilfreich

Hallo,
das reine Schließen der Dokumente bringt meiner Meinung nach eigentlich nicht viel, da die Daten erst vollständig beim Schließen von CATIA entladen werden. Es gibt jedoch Tools, die den Speicher beobachten und nicht verwendete Daten wieder freigeben.
Schau dir hierzu mal folgende Seite an: http://www.cleanup-xp.de/

Die Software kostet zwar, aber immerhin nur 17¤ bzw. 20¤. Ich würde dir aber empfehlen nur für den Notfall vorher ein Backup der Systemplatte zu ziehen.

Außerdem würde ich dir empfehlen unter Tools > Options > General/Allgemein > PCS die Stapelgröße runter zustellen (vll. sogar auf 0). Diese ist für die Speicherung von ReDo/UnDo-Vorgängen zuständig.
Wenn alles nichts hilft, dann würde ich die Aufgabe soweit möglich aufteilen.

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)

Konfuzius sprach: "Wer sich das Alte noch einmal vor Augen führt, um das Neue zu verstehen, der kann anderen ein Lehrer sein."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

dragon67
Mitglied
Projektleiter Lichttechnik

Sehen Sie sich das Profil von dragon67 an!   Senden Sie eine Private Message an dragon67  Schreiben Sie einen Gästebucheintrag für dragon67

Beiträge: 3
Registriert: 03.07.2009

XP 64; Catia 64 Bit
Quadcore 8GB RAM

erstellt am: 03. Jul. 2009 13:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

schon mal vielen Dank für die schnellen Antworten.
Also das mit den Speichertools wird wohl nicht funktionieren, da ich erstens XP64 einsetzen und zweitens kann das Tool wohl nicht den Speicher eines laufenden CATIA-Prozessen minimieren.
Die Variante mit den schließen und neuladen teste ich jetzt gerade. Vielleicht hilft es ja.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Florian Held
Mitglied
Teamleiter CAD-Solutions


Sehen Sie sich das Profil von Florian Held an!   Senden Sie eine Private Message an Florian Held  Schreiben Sie einen Gästebucheintrag für Florian Held

Beiträge: 81
Registriert: 07.09.2006

erstellt am: 03. Jul. 2009 14:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für dragon67 10 Unities + Antwort hilfreich

Hi,

also sollte speichern/schließen allein nicht funktionieren müsste man wirklich bei einem Catia-Neustart ansetzen.

Allerdings müsste man dann mit der Programmierung zumindest teilweise aus Catia herrausgehen (z.B VB.Net, TCL etc.), da das Programm den letzten Durchlauf merken, Catia neu starten und das Modell laden und das Makro mit den letzten gemerkten Durchlauf +1 wieder starten müsste (Sofern man dann nicht den kompletten Ablauf übers Externe Programm abwickelt sondern nur den Neustart).

------------------
MfG,
Florian Held

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

tomtom1972
Mitglied
dipl ing maschinenbau


Sehen Sie sich das Profil von tomtom1972 an!   Senden Sie eine Private Message an tomtom1972  Schreiben Sie einen Gästebucheintrag für tomtom1972

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 06. Jul. 2009 07:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für dragon67 10 Unities + Antwort hilfreich

Moin,

ich habe in ähnlichen Zusammenhängen das gleiche Problem: wenn CATIA stunden-/ tagelang läuft und rekursiv per Script Vorgänge abarbeitet, ist irgendwann Schluß und CATIA hängt sich auf.
Ich bin nach langen hin und her zu folgenden Schlußfolgerungen gekommen (und erhebe keinen Anspruch darauf, Recht zu haben). Ist alles nur eine Vermutung:

- es liegt nicht daran, das im Script für irgendwelche Objekte allokierter Speicher nicht mehr freigegen wird. Das habe ich tagelang ausprobiert, siehe auch diesen Post: http://ww3.cad.de/foren/ubb/Forum137/HTML/002119.shtml#000007

- o.a. Speichermanagment-Tools bringen überhaupt nichts. Zumindest diejenigen nicht, welche ich getestet habe. (Allerdings ist das schon ein bischen her.)

- Tools > Options > General/Allgemein > PCS die Stapelgröße ändern bringt gar nix

- es hat auch nichts primär mit der "Größe/Menge" der geladenen Daten zu tun: wenn ich eine Zeichung mit nichts als einer einzigen Linie drin rekursiv ein paar tausend mal öffne, als pdf speichere und wieder schliesse hängt sich CATIA irgendwann auf: eine große Datenmenge beschleunigt den Vorgang eben nur. Insofern gebe ich okl an dieser Stelle recht (bezieht sich auf die Diskussion im o.a. Post)

- Ich habe auch versucht per Script (ich arbeite mit VB6 /.Net, nicht mit CATscript oder VBA) im RAM bzw. der Auslagerungsdatei rumzuwurschteln. Dafür reichen allerdings meine Kentnisse nicht aus. Das hat keinen Erfolg gehabt.

- ich bin zu dem Schluß gekommen, das die Auslagerungsdatei (bzw. deren Größe: sie wächst an) das Problem ist und nur das Schließen von CATIA hilft.

Ich verwende seitdem immer wieder folgende Vorgehensweise:
- der Ablauf ist auf 2 unabhängige Prozesse aufgeteilt (beides .exes)
- die eine .exe ist im Prinzip nichts weiter als eine Fortschrittsanzeige, die zudem beim Scriptstart CATIA ausließt (Release, Environment ....), schliesst, neu startet und dabei die Prozeß-ID erfasst, die 2 .exe startet (und die Prozeß-ID erfasst) und rekursiv alle 10 sec kontrolliert, ob die beiden Prozesse noch laufen. Dieser Vorgang "belastet" den Arbeitsspeicher nicht wesentlich.
- die 2 .exe ist das eigentliche "Arbeitsscript" und macht, was eben gemacht werden soll. Nach jeder Schleife wird ein Eintrag in eine .txt-Datei geschrieben.
- die erste .exe kontrolliert die .txt-Datei. Wenn sich dort der Eintrag innerhalb einer Zeitspanne X nicht geändert hat killt das Script zuerst die andere .exe, dann CATIA und öffnet dann beides wieder und weiter.
- die erste .exe kontrolliert die zweite sowie CATIA. Hat sich ein Prozeß aufgehängt wird der andere gekillt + beides neu gestartet
- Beide Prozesse schreiben permanet in einen logfile was sie so treiben.
- beim starten der .exes kann man Paramter übergeben

Das ist äüsserst stabil und läuft tagelang ohne Probleme. Probleme treten nur Serverseitig auf: falls der länger ausfällt kann ich das nicht mehr abfangen.

Ich habe ursprünglich versucht die Größe der Auslagerungsdatei zu überwachen und beim Erreichen eines bestimmten Wertes CATIA zu schliessen. Das habe ich nicht hinbekommen (vielleicht hat ja jemand hierzu eine Idee). Stattdessen schliesse ich CATIA proforma alle X-Stunden.

Ich hoffe, das gibt dir ein paar Denkanstöße.

Gruß

------------------
tomtom1972

[Diese Nachricht wurde von tomtom1972 am 06. Jul. 2009 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

dragon67
Mitglied
Projektleiter Lichttechnik

Sehen Sie sich das Profil von dragon67 an!   Senden Sie eine Private Message an dragon67  Schreiben Sie einen Gästebucheintrag für dragon67

Beiträge: 3
Registriert: 03.07.2009

XP 64; Catia 64 Bit
Quadcore 8GB RAM

erstellt am: 16. Jul. 2009 15:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

@ tomtom1972
Vielen dank für deine Informationen. Das hat mir stundenlange Fehlersuche erspart.

Mein Makro schreibt jetzt immer den aktuellen Status in eine Datei und beendet Catia nach 50 Durchläufen. Ein externes Programm erkennt nun in der Datei, dass Catia beendet wurde und führt einen Neustart durch.

Das Problem dabei ist jetzt nur, dass sich Catia nicht zuverlässig beendet. Dann habe ich ein "altes" Catia mit ca. 2,5GB Speicherbelegung und zusätzlich öffnet sich dann ein weiteres, u.s.w.
Manchmal hab ich dann 10 Catias auf und der Rechner hängt komplett.

Zum Beenden führe ich im Makro den Befehl "Catia.Quit" aus. Gibt es eine andere Methode um Catia sicher zu beenden??

Vielen Dank im Voraus...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

tomtom1972
Mitglied
dipl ing maschinenbau


Sehen Sie sich das Profil von tomtom1972 an!   Senden Sie eine Private Message an tomtom1972  Schreiben Sie einen Gästebucheintrag für tomtom1972

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 17. Jul. 2009 07:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für dragon67 10 Unities + Antwort hilfreich

Hallo,

das geht mit ein bischen VBScript (VisualBasic6.0) .....

.... ganz am Anfang CATIA auslesen (welches + Environment)
.... CATIA.Quit  (funktioniert ohne Probleme, da du ja noch nichts gemacht hast)
.... damit du die TaskID kennst CATIA wie folgt öffnen

Code:
lTaskID = Shell(sCatShellExe, vbNormalFocus)   '--- sCatShellExe ist ein String, siehe unten

.... die Applikation anziehen (je nachdem wer wann wie wo CATIA öffnet dauert das unterschiedlich lang, auf jeden Fall ein paar Sekunden)

Code:

Err.Clear
On Error Resume Next
Do
   Break 1 '--- ist eine Funktion, siehe unten
   Err.Clear
   Set CATIA = GetObject(, "Catia.Application")
Loop Until (Err.Number = 0)
On Error Goto 0

.... Und irgendwann dann den CATIA-Prozeß killen: das ist wie im TaskManager die CNext.exe abschießen

Code:
cmdTerminate lTaskID
 
cmdTerminate ist eine eigene Sub, siehe unten


der String sCatShellExe (beispielhaft): du musst halt wissen, welches CATIA du mit welchem Env starten willst; vorher auslesen.

Code:
sCatShellExe = "C:\opt\ds\catia\1605_AUDIVW\intel_a\code\bin\CNEXT.exe -direnv " & Chr(34) & "C:\Documents and Settings\User" & Chr(34) & " -env " & Chr(34) & "Test.txt" & Chr(34)

die Pause Funktion

Code:
Function Break(iSec As Long)
   Start = Timer
   Do While Timer < Start + iSec
      DoEvents
   Loop
End Function


Und die Sub zum Killen des Prozesses (mit den notwendigen Deklarationen)

Code:
Private Declare Function CloseHandle Lib "kernel32" (ByVal _
   hObject As Long) As Long

Private Declare Function OpenProcess Lib "kernel32" (ByVal _
   dwDesiredAccess As Long, ByVal bInheritHandle As _
   Long, ByVal dwProcessId As Long) As Long

Private Declare Function TerminateProcess Lib "kernel32" (ByVal _
   hProcess As Long, ByVal uExitCode As Long) As Long

Const PROCESS_TERMINATE = &H1


Sub cmdTerminate(lTaskID)
   Dim hTask As Long
   Dim lResult As Long
   hTask = OpenProcess(PROCESS_TERMINATE, 0&, lTaskID)
   lResult = TerminateProcess(hTask, 1&)
   lResult = CloseHandle(hTask)
End Sub



Sofern du nur ein CATIA geöffnet hast (und das ist die Einschränkung) kommst du auch ohne den Neustart aus und wie folgt an die TaskID

Aufruf über

Code:
lTaskID = GetCNextID

Und die Funktion selbst (mit den notwendigen Deklarationen)

Code:
Private Declare Function CloseHandle Lib "kernel32" (ByVal _
        hObject As Long) As Long

Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" _
        (ByVal lFlags As Long, ByVal lProcessID As Long) As Long

Private Declare Function ProcessFirst Lib "kernel32" Alias _
        "Process32First" (ByVal hSnapShot As Long, uProcess _
        As PROCESSENTRY32) As Long

Private Declare Function ProcessNext Lib "kernel32" Alias _
        "Process32Next" (ByVal hSnapShot As Long, uProcess _
        As PROCESSENTRY32) As Long

Const TH32CS_SNAPPROCESS As Long = 2&
Const MAX_PATH As Integer = 260

Private Type PROCESSENTRY32
  dwSize As Long
  cntUsage As Long
  th32ProcessID As Long
  th32DefaultHeapID As Long
  th32ModuleID As Long
  cntThreads As Long
  th32ParentProcessID As Long
  pcPriClassBase As Long
  dwFlags As Long
  szExeFile As String * MAX_PATH
End Type

Public Function GetCNextID() As Integer
    Dim hSnapShot As Long, Result As Long
    Dim aa As String, bb As String
    Dim Process As PROCESSENTRY32
    Dim iCatia As Integer
    iCatia = 0
   
    hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)
    If hSnapShot = 0 Then Exit Function

    Process.dwSize = Len(Process)
    Result = ProcessFirst(hSnapShot, Process)
 
    Do While Result <> 0
        aa = Process.szExeFile
        aa = Left$(aa, InStr(aa, Chr$(0)) - 1)
        If Right$(LCase(aa), 4) = ".exe" Then
            If LCase(aa) = "cnext.exe" Then
               GetCNextID = Process.th32ProcessID
            End If
        End If
        Result = ProcessNext(hSnapShot, Process)
    Loop
    Call CloseHandle(hSnapShot)
End Function


Hoffe das hilft dir

------------------
tomtom1972

[Diese Nachricht wurde von tomtom1972 am 17. Jul. 2009 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz