Autor Thema: Speicherleck beim Client  (Gelesen 9678 mal)

Offline luether

  • Newbie
  • *
  • Beiträge: 4
Speicherleck beim Client
« am: März 14, 2006, 11:06:47 Vormittag »
Hallo OPC-Gemeinde,
in einer Client-Anwendung, die als Dienst zu laufen hat, habe ich mehrere OPC-Server zu Messgeräten zu konnektieren, die jeweils über sehr viele Items verfügen.

Die Messgeräte müssen zu jeder Messung extra befehligt werden.

Aus diesem Grund werden je Messung unterschiedliche Items verlangt und zu einer Messung eben nur die zu einem bestimmten Gerät angelegt. Benutzt werden die Items der Klasse SODACItemDefault. Die bis zu 4096 Messwerte werden in ein Array vom Typ VT_I4|VT_ARRAY abgelegt. Nach einer Messung werden die Items deaktiviert und sollen gelöscht werden und zur nächsten Messung werden wieder andere Items erzeugt und konnektiert. Das Neuerzeugen erfolgte mit addItem auf einem Group-Item. Das Deaktivieren erfolgte mit removeLeaf.
Funktionieren tut es, das Problem ist jedoch, dass der Speicherbedarf des Clients dabei ständig ansteigt, was für ein Dienstporgramm, das Tag und Nacht laufen soll, ungünstig ist. Bei removeLeaf werden nur ca. 30% vom Speicherbedarf eines Items wieder freigegeben. Es wundert mich, dass es zum addItem keine deleteItem-Methode gibt, und ein einfaches delete führt unter Umständen zum Absturz des Clients.

In einem anderen Versuch verzichtete ich auf das ständige Neuerzeugen und Löschen der Items, stattdessen erzeugte ich von vornherein alle Items und ließ sie ständig aktiv. Das führte zum Erfolg des konstant bleibenden Speicherbedarfs (getestet über ein Wochenende hinweg), brachte jedoch den Nachteil einer hohen CPU-Belastung. Dafür konnektierte ich die vorübergehend benötigten Items selektiv mit der start-Methode und deaktivierte sie nach der Messung wieder mit der disconnect-Methode. Leider bekam ich untrüglich den Eindruck, dass der Speicherbedarf daraufhin wieder ständig steigend war - ca. 0,3 MB pro Stunde.

Am Democlient von Softing habe ich nicht im geringsten festgestellt, dass Speicher freigegeben wird, wenn man Items großer Arrays löscht.

Was kann ich gegen wachsenden Speicherbedarf tun?
Habe ich vielleicht etwas übersehen?
Nun bin ich gespannt Ihre Antworten!
Mit freundlichen Grüßen
Heinz-Josef Lüther
« Letzte Änderung: März 14, 2006, 11:14:20 Vormittag von luether »

Offline cas-solution

  • Full Member
  • ***
  • Beiträge: 139
    • Gebäudeleittechnik
Re: Speicherleck beim Client
« Antwort #1 am: März 14, 2006, 18:05:06 Nachmittag »
Hallo hier CAS!  ;D

Wenn ich ehrlich bin, habe ich nicht das Problem so richtig erkannt.

Du hast also einen Client, der nicht das macht, was er soll ?
Suchst du eine passendere Lösung ?
Was für einen Client nutzt du jetzt ?

Wo soll man bei der Hilfe ansetzen ?

Bis dannnnnnnnnnn
CAS
www.cas-solution.de

Offline luether

  • Newbie
  • *
  • Beiträge: 4
Re: Speicherleck beim Client - Nachtrag
« Antwort #2 am: März 17, 2006, 09:27:44 Vormittag »
Um kurz auf das Posting von CAS  hinzuweisen: Es sollte doch schon aus dem Titel dieses Threads eigentlich offensichtlich sein, dass es um die Beseitigung eines Speicherlecks in einem OPC-Client geht.

Es gibt in der Industrie Maschinenüberwachungsprogramme, die dauerhaft Tag und Nacht laufen müssen. Solche Programme sollten nicht den Nebeneffekt haben, dass ihr virtueller Speicherbedarf (auch im Taskmanager zu sehen) für seine Ausführung ständig ansteigt. Wenn der Speicherbedarf ständig ansteigt, muss nämlich von Zeit zu Zeit für Abhilfe gesorgt werden, in dem das Programm neu gestartet wird.

Im vorliegenden Fall sieht es mir stark verdächtig danach aus, als ob OPC-Funktionen an der Speicherbedarfsentwicklung Schuld sind, denn verzichte ich auf die oben beschriebenen Aktionen - es sind OPC-Funktionen -, dann habe ich konstant bleibenden Speicherbedarf. Das Problem ist jedoch, dass dann die CPU-Belastung des PCs durch den OPC-Client (programmiert in MS Visual C++ 6.0) stark ansteigt, wenn sie auch insgesamt konstant bleibt.
Mit freundlichen Grüßen
Heinz-Josef Lüther

« Letzte Änderung: März 17, 2006, 09:42:10 Vormittag von luether »

Offline cas-solution

  • Full Member
  • ***
  • Beiträge: 139
    • Gebäudeleittechnik
Re: Speicherleck beim Client
« Antwort #3 am: März 17, 2006, 18:02:35 Nachmittag »
Hallo hier CAS !  ;D

Wenn du mit dem Client so ein großes Problem hast, dann nimm doch einen anderen !

Wo ist das Problem ?

Bis dannnn
CAS
www.cas-solution.de

Offline luether

  • Newbie
  • *
  • Beiträge: 4
Re: Speicherleck beim Client
« Antwort #4 am: März 20, 2006, 13:42:27 Nachmittag »
Hallo CAS,
ich arbeite an der Entwicklung eines speziellen Clients zu einem speziellen OPC-Server, in C++. Der Client auch Messwerte in eine Datenbank zu speichern. Was also sollte ich da mit einem anderen Client? Wie sollte das aussehen?

Ein Problem ist z.B. folgendes:
1) es wird ein Item erzeugt für einen bestimmten Zweck, also eine Schnittstelle mit der OPC-Funktion additem.
2) Nach bestimmten Aktivitäten soll das Item wieder gelöscht werden, was auch heißen soll, dass sein in Anspruch genommener Speicher zu 100% wieder freigegeben werden soll. Entweder habe ich dafür nicht die richtige Funktion gefunden habe (hier removeLeaf) oder es gibt keine, die dieser Aufgabe voll gerecht wird.

Ein anderes Problem ist, das Deaktivieren von Items mit der Funktion disconnect und Re-Aktivieren mit der Funktion start oder connect. Auch bei start/connect wird offensichtlich Speicher in Anspruch genommen, der bei disconnect nicht wieder freigegeben wird, was eigentlich nicht sein dürfte - es sei denn, es müssen noch andere Funktionen eingesetzt werden, die ich momentan nicht kenne.

Wer kennt denn hier die OPC-Toolbox C++ DA Client V4.0 ?
Oder bin ich hier in einem falschen Forum?
Mit freundlichem Gruß
Heinz-Josef Lüther


Offline cas-solution

  • Full Member
  • ***
  • Beiträge: 139
    • Gebäudeleittechnik
Re: Speicherleck beim Client
« Antwort #5 am: März 20, 2006, 18:19:32 Nachmittag »
Hallo hier CAS !  ;D

Falsches Forum ? vieleicht...
Die meisten hier kennen sich mit OPC nicht so richtig aus.Die wenigsten wissen was das ist.
Ich schätze mal, hier sind eine Hand voll Mitglieder, die irgendwas mit OPC machen.

Ich habe zwar auch einen OPC-Client geschrieben und kenne die Sorgen mit connect und disconnect, aber Items in einem Server anlegen oder löschen hab ich noch nicht gemacht.
Erlich gesagt, finde ich dazu auch keine passende Anwendung im wahren Leben.
Wenn ich Werte aufzeichnen möchte, dann lade ich diese per OPC in meine Anwendung und speichere die Werte in meiner DB oder auf Platte.

Falls Du Interesse an einer speziellen Lösung interesse hast, die Aufzeichnungen macht, dann setze dich mal mit mir in Verbindung.

Vieleicht gibt es ja ein richtiges echtes OPC-Forum. Ich kenne keines, höchstens das von der OPC-Foundation !

Hoffe ein bißchen geholfen zu haben...

Bis dannnnnnnnnn
CAS
www.cas-solution.de
 

Offline cas-solution

  • Full Member
  • ***
  • Beiträge: 139
    • Gebäudeleittechnik
Re: Speicherleck beim Client
« Antwort #6 am: März 21, 2006, 11:17:36 Vormittag »
Hallo hier CAS !  ;D

hab da noch eine Idee:

Falls dein Client eine MS-SQL-Datenbank zum Verwalten nutzt, könnte es am Schleppzeiger der Datenbank liegen. Dieser gibt dann den Speicher nicht mehr frei. D.h., wenn du Daten speicherst wird die Datenbank immer voller. Wenn du Daten löschst, bleibt die Datenbank scheinbar voll. Ist aber nicht so, da die Speicherauslastung vom Scheppzeiger kommt.
Wie man diesen zurückschraubt weis ich nicht und ob es geht auch nicht.

Hoffe noch ein bißchen geholfen zu haben...

Bis dannnn
CAS
www.cas-solution.de

Offline luether

  • Newbie
  • *
  • Beiträge: 4
Re: Speicherleck beim Client
« Antwort #7 am: März 22, 2006, 08:55:35 Vormittag »
Der Hinweis auf MySQL ist interessant, mein Client benutzt tatsächlich diese Datenbank. Das beschriebene Problem zeigt sich aber auch, wenn man einen zu Beobachtungszwecken stark auf das Nötigste vereinfachten Client benutzt, der keinen Zugriff auf eine MySQL-Datenbank ausführt, daher meine Sicherheit, dass das Problem in den von mir verwendeten OPC-Funktionen liegt.
Einige OPC-Server habe ich auch schon programmiert.
Mit freundlichem Gruß
Henz-Josef Lüther


Offline ChristianHemker

  • Jr. Member
  • **
  • Beiträge: 38
Re: Speicherleck beim Client
« Antwort #8 am: November 07, 2007, 11:57:41 Vormittag »
Hallo,

auch wenn der Thread uralt ist:
Vielleicht hilft dieser Patch von Microsoft weiter?
http://support.microsoft.com/kb/319740/en-us

Grüße,

Christian
Tutorial Rollladensteuerung
http://www.hemker.de/easy/teil1-4.zip
Tutorial Visualisierung mit ShowIt
http://www.hemker.de/easy/showit.zip