12.11.2009, 06:11
(Dieser Beitrag wurde zuletzt bearbeitet: 12.11.2009 06:11 von Achim.)
|
|
|
12.11.2009, 07:13
|
rasta
LVF-Gelegenheitsschreiber
Beiträge: 245
Registriert seit: Oct 2006
LabVIEW 2009-2017
2006
EN
53909
Deutschland
|
Arbeitsspeicher nach 3 Tagen voll/Systemabsturz
' schrieb:Ich habe übrigens alle Sub Vis wieder zurück ins Hauptprogramm geführt, weil ich bei NI gelesen habe dass SUB Vis auch Speicher belegen können, da auch Sub Vis Kopien im Speicher anlegen. Deswegen kam von dort die Empfehlung, keine (!) Sub Vis zu benutzen (was klar gegen die Schön- Programmier-Richtlinie geht).
Hallo,
das glaube ich nicht..
' schrieb:Prinzipiell gehts ja um die Frage: was lässt die Arbeitssspeicherbelegung anwachsen? Sind es die lokalen Variablen? Wenn ja, kann ich den durch LabVIEW leeren, ohne das VI zu stoppen?
Ich habe jetzt nur mal flüchtig den Code angesehen und nachdem Achim eine steife Hand hat musste ich den Reifen vom Scrollrad wechseln, also keine
Wunder erwarten.
Schleife 1:Liefert die Daten für die Diagramme
Hier erstellt Du für max. 72 Std bei einer Aktualisierung von 1/s für jeden der 9 Kanäle ein Array und führst diese Arrays CHARTS zu die von Hause aus eine Historienlänge haben.
Nebenbei bemerkt entsprechen diese Arrays max. 9*3600*72 = 2332800 Werte die erstmal dargestellt und intern gehandelt werden müssen.
Suche mal hier im Forum nach Ringspeicher..
Gruß
Ralf
|
|
|
12.11.2009, 07:43
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
Arbeitsspeicher nach 3 Tagen voll/Systemabsturz
Von NI? Das glaube ich beim besten Willen nicht. Ich habe so ziemlich jede LabVIEW-Schulung bei NI mitgemacht (inkl. Performance Guide) und dort machen sie eher ein SubVI zu viel als zu wenig!
Wer hat Dir das denn gesagt, bzw. wo hast Du das bei NI gelesen?
Gruß Markus
' schrieb:Deswegen kam von dort die Empfehlung, keine (!) Sub Vis zu benutzen (was klar gegen die Schön- Programmier-Richtlinie geht).
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
12.11.2009, 09:47
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
Arbeitsspeicher nach 3 Tagen voll/Systemabsturz
' schrieb:Ich habe jetzt nur mal flüchtig den Code angesehen und nachdem Achim eine steife Hand hat musste ich den Reifen vom Scrollrad wechseln, also keine
Wunder erwarten.
Ich auch, ich auch...
Habe aber trotzdem was gefunden, was mit gar nicht gefällt:
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
12.11.2009, 10:55
|
IchSelbst
LVF-Guru
Beiträge: 3.696
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Arbeitsspeicher nach 3 Tagen voll/Systemabsturz
' schrieb:Ich auch, ich auch...
Ich auch, ich auch ...
Das mit der File-Referenz-Verzweigung sehe ich bezüglich Schließen nicht so eng. Schlimmer ist, dass dadurch zwei parallele Schreibzugriffe auf die Datei möglich sind. Frage: Welcher der beiden Schreibzugriffe findet zuerst statt?
Ansonsten schließe ich mich den Hinweisen von rasta an. Möglicherweise kommt der Speicherverbrauch von den Graphen, die bekanntermaßer Speicherverbraucher sind.
Außerdem sollte folgendes überlegt werden:
Wenn in einen (Sub)VI Speicher alloziert wird, so wird der frühestens am Ende des (Sub)VIs wieder freieggeben. So gesehen haben SubVIs also weitere Vorteile. Sollte in einem so großen VI Speicher zyklisch angefordert werden (was ich zwar nicht beweisen, mir aber ohne weiteres vorstellen kann), so wird eines Tages der Speicher überlaufen. Programmiert mit SubVIs würde kurzzeitig verwendeter Speicher wieder freigegeben werden.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
13.11.2009, 13:10
|
dude776
LVF-Grünschnabel
Beiträge: 28
Registriert seit: Jun 2006
8.6
-
de
86911
Deutschland
|
Arbeitsspeicher nach 3 Tagen voll/Systemabsturz
Hi,
tschuldigung für die Abnutzungserscheinungen beim VI check.
Habe aber leider keine Zeit, das VI prinzipiell neu aufzusetzen, was ich aber gerne machen würde (wenn ich könnte). Muss so halt weiter mit dem Spott der LabVIEW Pros leben...
Die Info, dass ein SUBVI eine höhere Speicherauslastung zur Folge haben kann, stammt aus der LAbView Hilfe, da steht zwar unter "Speicherauslastung" dasss man die Style Guide befolgen soll (Sprich:SubVis), an einem andern Ort in der Hilfe (den ich zugegebenerweise nicht mehr finde, deswegen: auch egal!) wurde behauptet, dass wenn das VI schnell wie möglich mit der wenigsten Speicherauslastung laufen soll, dann, sinngemäß wiedergegebn: solle man sich nicht an die Style guide halten und ohne SubVis programmieren...ICh habs da halt gelesen, jetzt mühselig darüber zu diskutieren. Ganz klär täten meinem VI SubVis gut, das ist nicht die Ursache für die Speicherauslastung (habe ich auch getestet, so dass jetzt ca. 4 Schleifen vorher in einem SubVi realisiert waren--> Kein Unterschied in der Performance.
Ich habe wie bereits anfangs erwähnt, sämtliche "verdächtige" Schleifen (z.B: Diagramme, Datenarchivierung, PID Regler) rausgelöscht, trotzdem stieg die Speicherauslastung innerhalb der 3,4 Tage bis zum Absturz.
In der Hilfe fand ich folgendes:
"Lokale Variablen erstellen Kopien der Datenpuffer. Das heißt, beim Auslesen einer lokalen Variable wird für die Daten des damit verbundenen Bedienelements ein neuer Puffer erstellt.
Wenn eine große Anzahl an Daten von einer Stelle im Blockdiagramm an eine andere übertragen wird, ist im Allgemeinen mehr Speicherplatz erforderlich, und dementsprechend verlangsamt sich auch die Ausführungsgeschwindigkeit gegenüber dem Datenaustausch über eine normale Verbindung. Zur Speicherung von Daten während der VI-Ausführung empfiehlt es sich, Schieberegister zu verwenden. "
Ist meine Variablenanzahl wirklich so hoch, dass es zum Überlauf kommen kann? Kanns irgendwie nicht glauben....Ist die "Struktur" mit x parallel laufenden Schleifen ein Problem? Oder gibts ein Problem mit der "State Machine (Schleife 2)?
Grüße
|
|
|
13.11.2009, 13:53
|
IchSelbst
LVF-Guru
Beiträge: 3.696
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Arbeitsspeicher nach 3 Tagen voll/Systemabsturz
' schrieb:"Lokale Variablen erstellen Kopien der Datenpuffer. Das heißt, beim Auslesen einer lokalen Variable wird für die Daten des damit verbundenen Bedienelements ein neuer Puffer erstellt.
Wenn hier gesagt wird, dass lokale Variablen Speicherplatz verbrauchen, dann ist das so gesehen richtig - aber ggf. unerheblich für dein Problem. Der Variablen-Speicher muss ja nicht ständig neu angefordert werden. Einmal vorhanden ist ja ausreichend. Das gilt für Basistypen (INT, Bool, DBL etc.) und Zusammenstellungen von Basistypen (cluster).
Achtung Ausnahme: dynamische Datentypen wie z.B. Strings und Array werden bei jedem Beschreiben neu alloziert.
Zitat:Ist meine Variablenanzahl wirklich so hoch, dass es zum Überlauf kommen kann?
Da muss ich, da mir das mit den dynamischen Typen eingefallen ist, noch mal kucken.
Zitat:Ist die "Struktur" mit x parallel laufenden Schleifen ein Problem?
Per se nicht. (Ich zähl die vielen Xe schon gar nicht mehr).
Zitat:Oder gibts ein Problem mit der "State Machine (Schleife 2)?
Soll ich die auch noch ankucken?
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
13.11.2009, 14:45
(Dieser Beitrag wurde zuletzt bearbeitet: 13.11.2009 14:47 von IchSelbst.)
|
IchSelbst
LVF-Guru
Beiträge: 3.696
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Arbeitsspeicher nach 3 Tagen voll/Systemabsturz
' schrieb:(Schleife 2)?
Wieso denn erst Schleife 2? Bei deinem Programm geht's schon in Schleife 1 los! (Wie war das mit dem Schaden und dem Spott?)
Du hast dort 9 Stück Array in Schieberegister. Die Länge der Arrays ändert sich pro Schleifendurchlauf. Wenn die maximale Arraylänge erreicht ist, löscht du das erste Element und fügst ein neues hinten an. Das alles kostet Speicher. Da die Schleife nur einmal pro Sekunde durchlaufen wird, kann ich mir vorstellen, dass der Absturz erst nach 3 Tagen passiert.
Ich würde hier folgendes machen: Initialisieren der Schieberegister mit 1DArr of DBL, Wert NAN, Länge MAX. Statt "An Array anhängen" nimmst du "In Array ersetzen". Das mit dem Löschen lässt du weg und nimmst stattdessen "1DArr rotieren".
Nachtrag:
Beachte weiterhin auch Beitrag #12.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
| |