IPS frisst unaufhaltsam Speicher (gelöst!)

Da fällt mir jetzt nur eine Änderung ein, die ich seither vorgenommen hatte.
Ich habe im Webfront ein paar Container mit Links zu Webseiten (niederschlagsradar) gefüllt. Siehe hier… Unterkategorie im Container anzeigen?

Mit Webseiten hatte ich früher schon häufiger Probleme, ich habe sie
dann irgendwann einmal komplett rausgeschmissen.

VG
Stephan

Nur vorweg:
Ich habe ab und an Probleme, das ein IRQ mir den Rechner (CPU) belegt. Habe auch nach Monaten nicht rausfinden können, welcher Treiber dies alle paar Tage und Wochen mal macht. Daher starte ich dann automatisch neu, aber nur nachts, hat also nur indirekt mit IPS zu tun.

Also hier mal ganz simpel der Serverneustart.

Das bekannt Script um die CPU-Last auszuwerten (trigger bei mir alle 60s.)

$parentID = IPS_GetObject($IPS_SELF);
    $parentID = $parentID['ParentID'];

    $cpuInfo = Sys_GetCPUInfo();
    for ($i = 0; $i < count($cpuInfo) - 1; $i++)
    {
        SetValueInteger(CreateVariableByName($parentID, 'CPU '.$i, 1, '~Valve'), $cpuInfo['CPU_'.$i]);
    }
    SetValueInteger(CreateVariableByName($parentID, 'durchschnittliche Last', 1, '~Valve'), $cpuInfo['CPU_AVG']);

    IPS_SetScriptTimer($IPS_SELF, 1*60);

    function CreateVariableByName($id, $name, $type, $profile = "")
    {
        global $IPS_SELF;
        $vid = @IPS_GetVariableIDByName($name, $id);
        if($vid === false)
        {
            $vid = IPS_CreateVariable($type);
            IPS_SetParent($vid, $id);
            IPS_SetName($vid, $name);
            IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
            if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
        }
        return $vid;
    }

Und hiermit werte ich dann aus, ob es eine dauerhafte Belegung einer CPU gibt. Die beiden Scripte kann man auch gut zusammen führen oder um die Speicherbelastung erweitern. Trigger 1x Std., Serverneustart bei Bedarf zwischen 3 u. 4 Uhr.

// Wenn 5 Stunden > 90% dann Neustart zwischen 3 und 4 Uhr nachts.
// Trigger stündlich

$CPU0 = GetValueInteger(25701 /*[Programme\IPS_Rechner\CPU\CPU 0]*/ );
$CPU1 = GetValueInteger(18837 /*[Programme\IPS_Rechner\CPU\CPU 1]*/ );

if (($CPU0 > 90) or ($CPU1 > 90)) {
	SetValueInteger(23735 /*[Programme\IPS_Rechner\Auto_Server_Restart\Auto_Server_Restart_counter]*/, (GetValueInteger(23735 /*[Programme\IPS_Rechner\Auto_Server_Restart\Auto_Server_Restart_counter]*/) + 1));
	} else {
	SetValueInteger(23735 /*[Programme\IPS_Rechner\Auto_Server_Restart\Auto_Server_Restart_counter]*/, 0);
}

if ((date("H") == 03) and (GetValueInteger(23735 /*[Programme\IPS_Rechner\Auto_Server_Restart\Auto_Server_Restart_counter]*/) >= 5)){
	SetValueInteger(23735 /*[Programme\IPS_Rechner\Auto_Server_Restart\Auto_Server_Restart_counter]*/, 0);
   SetValueString(51916 /*[Programme\Sound\Speak SK1\Speak\Speak]*/ , "Das System wird in 30 Sekunden neu gestartet!");
IPS_Execute("shutdown", "/r", false, false);
}

Vllt. kann’s wer gebrauchen.

Viele Grüße,
Doc

Wieso das denn?

Du musst Doch nur die settings.xml sichern und Dich für den Test mit Änderungen zurückhalten. Wenn der Fehler bei den Webseiten liegt dann bleiben die eh’ gelöscht oder müssen überarbeitet werden. Ansonsten spielst Du einfach die alte settings.xml zurück und die Einträge sind wieder da.

Oder habe ich da einen Knick in der Denke?

Grüsse.

Na so einfach ist das bei mir nicht, da ich permanent (alle 10 Sekunden) das Wetter aufzeichne und gewisse Werte in bestimmten Variablen speichere um zu nachfolgenden Berechnungen heranziehe.
Würde ich jetzt einfach eine ältere Settings wiederverwenden, passt garnichts mehr… dazu ist die Konfiguration meines IPS einfach zu komplex und untereinander abhängig… ist eben individuell;)

Mittlerweile habe ich aber schon den Versuch am Laufen, dass ich erstmal die externen Web-Seiten gelöscht habe.
Hab mir Screenshots der Konfiguration gemacht… da brauchte ich nichts notieren.

Selbstverständlich muss ich „im Notfall“ sowieso eine ältere Settings verwenden und damit leben… ist mir aber bisher noch nicht passiert:)

Geholt aus dem Netz oder mit „lokaler“ Messtechnik?

Wenn Netz, mit direkten IPS oder PHP Funktionen?

Wenn du mit PHP „Dateisystem-Funktionen“ die Webseite lädst und nicht korrekt das Handle schließt, kann der Speicherverbrauch auch ansteigen.

@Ralf

Mit lokaler(eigener) Wetterstation über RS232-Schnittstelle.
Das aber schon über mehrere Monate… das ist nicht das Problem, aber…

Dank deinem Denkanstoss… habe ich jetzt mal die beiden externen Links zu niederschlagsradar[dot]de vor ca. einer Stunde gelöscht und seither keine merkliche Aufblähung des Speicherbedarfs von IPS bemerkt.
Ich werde das mal weiter beobachten.

Leider ist das schade, denn dort standen genau die Informationen, die mir zu meinen eigenen Wetterdaten fehlten, die ich fürs WF für interessant hielt.

Ich weiss nun nicht, ob man dazu im Webfront etwas ändern kann (@paresy und @Horst), dass ein Reload der externen Links auch den Speicher wieder freigibt und nicht einfach so verbrät?
Ich denke aber, da müsste sich doch etwas machen lassen… Bug?

Ich hole meine Daten (regenradar, accuwether) alle 10 Minuten aus dem Netz. Und in meinem Logging gibt es immer mal wieder Lesefehler bzw. dauert der Abruf im Duchschnitt ca. 40 Sekunden.

Wenn du immer wieder/mehr hängende Abfragen hast, könnte das auch den Speicher blocken.

eine Ergänzung zu meinem ersten Posting in diesem Thread: ich habe heute IPS auf einen neuen Server umgezogen. Ich hatte noch nicht alle COM-Ports eingerichtet (für die Peripherie), IPS aber schon gestartet. Ergebnis: innerhalb von 2-5 Minuten hat sich der Speicherverbrauch auf 8GB(!!!) erhöht. Erst als die COM-Ports (auf die IPS zugreift) funktionierten ging der Speicherverbrauch auf ein Normalmaß zurück.

Hmmm… habe nun alle externen Webanfragen und Seiten deaktiviert bzw. gelöscht, aber das Problem ist latent.

Da hatte ich mich wohl doch zu früh gefreut bzw. falsch beobachtet:(
Nun tappe ich erstmal wieder im Dunkeln… Mist! … die Hoffnung war groß.
Die COM-Ports sind alle aktiviert und problemlos in Benutzung…

Habe jetzt auch mal auf den Speicher geachtet.
Das ist bei mir kein Problem, anscheinend ist mein Problem also ein anderes.

Ich mach mal ein spin off thread auf …

Beachtet bitte bei jeglichen Aussagen, wieviel Speicher welcher Prozess belegt. Das WebFront kann z.B. ein Speicherleck im Browser (IE/FF…) provozieren, welches dann eher ein Browser Problem ist. Die Konsole wäre als ips_console.exe der Speicherfresser… und der Kern… also der Dienst in dem die Skripte laufen… ist die ips.exe. Um überhaupt irgendwelche Schlüsse ziehen zu können, wäre es wichtig genau den Prozess zu nennen, der Schuld ist. Das der Gesamtverbraucht hoch geht kann ja sogar an eurem Virenscanner liegen oder so :slight_smile:

paresy

Bei mir steigt der Speicher der IPS_Console. Nutze Dashboard, kein Webfront. Werde auch mal versuchen, das Problem einzugrenzen.

Hallo.

IPS-CONSOLE <> IPS.EXE

Wenn die Konsole Speicher frisst dann einfach zu machen wenn man Sie nicht mehr braucht.
Wenn IPS.EXE den Speicher frisst ist das eine ganz andere Baustelle…

Grüsse.

Für das Dashboard brauchst du aber zwangsläufig die Konsole.
Das Dashboard läuft bei mir auch ständig, das ist ja genau das Problem.

Wenn ich die Konsole auf einem entfernten Rechner starte, steigt auch dort der Speicherverbrauch stetig an, ca. 200MB am Tag.

Das kann doch eigentlich nichts mit einem schlecht prog. Script zu tun haben?
Da muss doch generell was nicht ok sein. Ich starte halt einmal in der Nacht die Konsole neu, um das zu umgehen.

Grüße,
Doc

Hallo.

Ich oute mich hiermit als reiner Webfront-User und bitte um Aufklärung.

Bisher war ich der Ansicht die IPS-Konsole dienst ausschließlich zur Konfiguration des Systems und ist für den laufenden Betrieb NICHT notwendig.

Die Aussage „Für das Dashboard brauchst du aber zwangsläufig die Konsole.“, d.h. die Konsole müsste aktiv laufen um das Dashboard zu nutzen passt da nicht ins Bild.

Ich hatte das Problem mit der Konsole auch schon -

http://www.ip-symcon.de/forum/f18/ip-symcon-konsole-frisst-speicher-11619/#post96557

  • nachdem ich die Konsole nun nach Ende der kreativen Phase :rolleyes: wieder schliesse ist aber Ruhe.

Sollte das Dashboard tatsächlich einen angemeldeten Benutzer mit laufender Konsole benötigen frage ich mich warum der IPS-Server eine Webserver-Instanz hat?

Grüsse.

Seit der V2.0 brauchst du für das Dashboard nunmal die Konsole. Da hier so einige einen Touch im Flur haben, auf dem das Dashboard läuft, läuft somit die Konsole dort 24/7 mit den weiter oben beschriebenen Problemen.
Ich wundere mich allerdings, das hier noch so wenige mit diesen Problemen gemeldet haben?

Warum der IPS-Server einen Webserver hat?
Na, wer soll denn die Webseiten für das Webfront bereitstellen?
Oder habe ich deine Frage falsch verstanden?

Grüße,
Doc

Nachtrag: sehe gerade, das du 4GB RAM hast, bei nur 1GB Atom Rechner bis du da sehr schnell am Ende!

Hallo Doc,

die Probleme mit dem Speicher und dem Dashboard sind doch bekannt.
Die wurden früher schon öffter diskutiert.

Mein Speicherproblem habe ich hoffentlich geheben können, läuft seit mehreren Stunden fast normal.
Der IPS-Dienst hat ständig seinen Speicher vergrößert.
Ich benutzte von Coyote das Abfrage-Skript für die Viessmann-Heizung.
Der Comport wurde am Anfang einmal geöffnet und nach der Abfrage wieder per Viessmann-Skript geschlossen, es wurden ca. 20 Werte abgefragt.
Nachdem ich zwischen dem Abfragen von Werte, dem Comport schliesse und wieder öffne, läuft alles normal.
Es ist vermutlich ein Problem mit der Registervariable.

Also nochmal um Mißverständnisse zu vermeiden.
Der Speicherverbrauch der Konsole steigt auch ohne das das Dashboard geöffnet ist. Das hat also nicht mit dem Dashboard zu tun.
Auch auf einer Konsole die auf einem anderen Rechner geöffnet wurde und Verbindung zum IPS-Server hat zeigt dieses Verhalten.

Grüße,
Doc

Bei mir ist die immer offen, weil ich direkt darin fummeln will, wenn mir ne Idee kommt. Wäre ja ein programmtechnischer Witz, wenn IPS nur mit geschlossener Konsole vernünftig liefe. (man beachte den Konjunktiv)

Hi!

Ich bin noch keinen Schritt weitergekommen, die Ursache zu finden. Was habe ich in den letzten 3 Tagen alles probiert:

  • logging.db bereinigt
  • Domänen-Benutzer lokale Adminrechte verliehen, obwohl ich vorher schon die Rechte auf Vollzugriff für den IPS-Ordner erteilt habe
  • FIFO-Buffer der COM-Schnittstellen deaktiviert
  • Webfront-Server komplett deaktiviert … war meine größe Hoffnung!
  • Virenscanner Ausnahmen auf die IPS-Prozesse und IPS-Ordner bestanden bereits

Nun bin soweit, dass ich den IPS-Dienst doch über „Geplante Tasks“ und mit der Kommandozeile(cmd)

psservice.exe restart IPSServer

einmal täglich neu starten lassen werde. >>>PsService

Meine Vermutung, da alle anderen Versuche nicht fruchteten, geht nun hin zur Behandlung der Registervariable mit den COM-Ports, die bei mir exzessiv in Benutzung sind.
Ich habe 3 COM-Ports:

  • über COM1 werden alle 10 Sekunden die aktuellen Messwerte der Wetterstation ausgelesen und in Variablen geschrieben
  • über COM2 kommen alle 2 Sekunden von einer weiteren Wetterstation Daten rein und werden ebenfalls in Variablen geschrieben
  • Über einen weiteren virtuellen COM-Port (Moxa-Nport-Server) erhalte ich sekündlich die Daten vom Leveljet über die Heizölmenge

@paresy
Kannst Du hier ansetzen? Ich meine COM-Port und Registervariable…?