IP-Symcon unter Wine - High Load Problem

Moin,

ich habe das Problem, dass nach rund einem Tag die ips.exe immer eine sehr hohe Load auf dem Unix System erzeugt. Wenn ich dann die ips.exe frisch neu starte ist die Load sehr gering. Im Logfile von ips finde ich leider keinen Hinweis auf den Erzeuger, warum die hohe Last erzeugt wird.

Gibt es einen sog. DebugMode indem man mehr über aktuellen Tätigkeiten erkennen kann um so den Erzeuger der Last zu finden?

Viele Grüße
Sascha

Habe nach und nach die Komponenten von ips abgeschaltet und dabei ist mir aufgefallen dass wohl mein soap-query script die load erzeugt…

Folgendes Script nutze ich für cacti und Klima-Daten vom IPS-System zu pollen. Dabei werden alle Thermostate in der Kategorie „Geräte Kategorien“ und der entsprechenden Kategorie für das Geschoss abgefragt… Die Thermostate heissen alle „Raumklima <Raumname>“.

Hinweis: Es sind alles Homematic Thermostate


<?php

### CONFIG
$cat_ids = array(
   32614  /*[Geräte Kategorien\Thermostate EG]*/,
   29629  /*[Geräte Kategorien\Thermostate DG]*/
);
### CONFIG END

$host = $_SERVER['argv'][1];
$cmd  = $_SERVER['argv'][2];

$umlaute = Array("/ä/","/ö/","/ü/","/Ä/","/Ö/","/Ü/","/ß/");
$replace = Array("ae","oe","ue","Ae","Oe","Ue","ss");

$soap_cm = new SoapClient("http://$host:3773/wsdl/IIPSCategoryManager");
$soap_om = new SoapClient("http://$host:3773/wsdl/IIPSObjectManager");
$soap_lm = new SoapClient("http://$host:3773/wsdl/IIPSLinkManager");
$soap_vm = new SoapClient("http://$host:3773/wsdl/IIPSVariableManager");

function GetCompleteData()
{
   global $cat_ids, $umlaute, $replace;
   global $soap_cm, $soap_om, $soap_lm, $soap_vm;
   $resultarr = array();
   foreach ( $cat_ids as $cat )
   {
      $device_links = $soap_om->GetChildrenIDs($cat);
      foreach ( $device_links as $device_link )
      {
         $location = utf8_decode($soap_om->GetName($device_link));
         $location = preg_replace("/Raumklima /", "", $location);
         $location = preg_replace($umlaute, $replace, $location);

         $link = $soap_lm->GetLink($device_link);
         $id = $link->LinkChildID;
         array_push($resultarr, "$id:$location");
      }
   }
   return $resultarr;
}

function GetDataPoint($id, $type)
{
   global $soap_cm, $soap_om, $soap_lm, $soap_vm;

   $obj = $soap_om->GetObject($id);

   $value = 0;
   foreach ( $obj->ChildrenIDs as $item )
   {
      if ( $soap_om->GetName($item) == "HUMIDITY"  )
         if ( $type == "humidity" )
            $value = $soap_vm->ReadVariableInteger($item);
      if ( $soap_om->GetName($item) == "TEMPERATURE" )
         if ( $type == "temperature" )
            $value = round($soap_vm->ReadVariableFloat($item),2);
   }
   return $value;
}

if ( $cmd == "query" )
{
   $resultarr = array();
   $resultarr = GetCompleteData();

   foreach ( $resultarr as $item )
   {
      list($id, $location) = explode(":", $item);
      echo "$id:$location
";
   }
}

if ( $cmd == "get" )
{
   $type = $_SERVER["argv"][3];
   $getid = $_SERVER["argv"][4];

   $value = GetDataPoint($getid, $type);
   echo "$value"; 
}
?>

Warum dieses Script so eine nachhaltig hohe Load (auch nach der Ausführung) erzeugt, kann ich mir nicht erklären. Evtl. passiert bei einem Soap-Request noch etwas anderes was nicht „offensichtlich“ ist…

Das wirklich seltsame daran ist, dass nach einem frischen Start von ips die Antworten via Soap recht fix kommen. Nach einer längeren Uptime und evtl. schon einigen Soap-Requests dauern die Antworten wesentlich länger!

Wenn ich das Script deaktiviere dann geht die Load auch wieder recht schnell runter und normalisiert sich. Bei dem erneuten Soap-Anfragen dauert die Antwort jedoch trotzdem lange. Evtl. ist im Speicher etwas vorhanden, was sehr viel Zeit zum verarbeiten bedeutet.

Hat evtl. jemand einen Hinweis?

Viele Grüße
Sascha