[gefixt] Speicher gestohlen

Hallo zusammen,

seit ich gestern das neueste Update und das Tool von Elektrofreak (besten Dank für die Systemgraphen) installiert habe steigt der Speicherbedarf von IPS rasant an. Nach Neustart gestern war laut Taskmanager der Speicherbedarf für IPS ca. 40MB, jetzt fast 24h später klaut sich IPS schon 212MB Tendenz steigend :frowning:
Man kann das auch schön an den Graphen sehen:
http://atr-computer.dyndns.org:8080/Webgraphen/Multichart.php?prefix=System

Es ist bestimmt nur noch eine Frage der Zeit das IPS abnippelt :mad:

Paresy, hast du ne Idee :confused:

Grüße
Thomas

Hmm so auf die Schnelle nicht.

Bei mir/steiner geht der Speicher nicht hoch. steiner hat, wenn ich mich recht endsinne, auch das Tool von elekrofreak installiert.

Versuch das Tool doch sonst mal temporär abzuschalten, um den Fehler einzugrenzen.

paresy

Hi,
ich habe heute morgen die Aufzeichnung der Systemgraphen mal deaktiviert. Mal sehen wenn ich heute Nachmittag heimkomme wie es dann aussieht. IPS ist gestern abend bei ca. 240MB abgeschmiert :o
Nach Neustart von IPS ging es dann wieder bei ca. 40MB los und bis heute morgen waren es dann schon wieder 96MB :frowning: .

Gruß
Thomas

Hallo MSR,

mit Tool meinst du nur das Script für die minütlichen Systemgraphen oder ?
Mein Speicher geht auch hoch, hatte aber noch keinen Absturz.

@paresy: Könntest das an den Systembefehlen denn überhaupt liegen ?
Du hattest auch mal geschrieben das man Script nur mit einem Return verlassen soll, gilt das auch für functions in einem Script ?

Gruß
Oliver

Hallo Oliver,

ja, „exit“ solltest Du bitte grundsaetzlich ganz vermeiden, die IPS PHP Engine arbeitet hier so, dass dann nachfolgende Scripte nicht mehr abgearbeitet werden.

Funktionen sollten darueberhinaus niemals mit exit beendet werden. Hier ist eigentlich dafuer break vorgesehen, aber auch davon halte ich nichts. Lieber das ganze sauber strukturieren, indem Du IF THEN ELSEIF verwendest, damit umgehst Du diese Problem ganz.

Gruss Torro

Hallo Elektrofreak,

mit Tool meinst du nur das Script für die minütlichen Systemgraphen oder ?

Ja, genau das.

Der Speicher geht wirklich rasant hoch :frowning:

Gruß
Thomas

Hallo MSR, Paresy,

also ich habe es mal getstet 50 mal Script ausführen = 5 MB mehr für IPS.

@Paresy

Ich glaube mein Script ist ok:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : SystemInfo.ips.php
Trigger  : 
Interval : 
*/

$suffix="Sys";
$initial=false;

// IPS Process Info in IPS Variablen schreiben

if ($initial) {
$IpsIntVars=array($suffix."IpsHandlecount",$suffix."IpsNumthreads",$suffix."IpsVirtualsize",
      $suffix."IpsWorkingsize",$suffix."IpsPagefile",$suffix."ProcessCount");
varfloatcheck($IpsIntVars);
}

$PInfo=Sys_GetProcessInfo();
SetValueFloat($suffix."IpsHandlecount",(Float)$PInfo["IPS_HANDLECOUNT"]);
SetValueFloat($suffix."IpsNumthreads",(Float)$PInfo["IPS_NUMTHREADS"]);
SetValueFloat($suffix."IpsVirtualsize",(Float)$PInfo["IPS_VIRTUALSIZE"]);
SetValueFloat($suffix."IpsWorkingsize",(Float)$PInfo["IPS_WORKINGSETSIZE"]);
SetValueFloat($suffix."IpsPagefile",(Float)$PInfo["IPS_PAGEFILE"]);
SetValueFloat($suffix."ProcessCount",(Float)$PInfo["PROCESSCOUNT"]);

// System Memory Info in IPS Variablen schreiben
if ($initial) {
$IpsIntVars=array($suffix."MemTotalPysical",$suffix."MemAvailPhysical",
   $suffix."MemTotalPageFile",$suffix."MemAvailPageFile",$suffix."MemTotalVirtual",
   $suffix."MemAvailVirtual");
varfloatcheck($IpsIntVars);
}
$MInfo=Sys_GetMemoryInfo();
SetValueFloat($suffix."MemTotalPysical",round($MInfo["TOTALPHYSICAL"]/1024/1024,0));
SetValueFloat($suffix."MemAvailPhysical",round($MInfo["AVAILPHYSICAL"]/1024/1024,0));
SetValueFloat($suffix."MemTotalPageFile",round($MInfo["TOTALPAGEFILE"]/1024/1024,0));
SetValueFloat($suffix."MemAvailPageFile",round($MInfo["AVAILPAGEFILE"]/1024/1024,0));
SetValueFloat($suffix."MemTotalVirtual",round($MInfo["TOTALVIRTUAL"]/1024/1024,0));
SetValueFloat($suffix."MemAvailVirtual",round($MInfo["AVAILVIRTUAL"]/1024/1024,0));

// System CPU Info in IPS Variablen schreiben
if ($initial) {
$IpsIntVars=array($suffix."CPU0",$suffix."CPUAverage",);
varfloatcheck($IpsIntVars);
}
$CPUInfo=Sys_GetCPUInfo();
SetValueFloat($suffix."CPU0",(Float)$CPUInfo["CPU_0"]);
SetValueFloat($suffix."CPUAverage",(Float)$CPUInfo["CPU_AVG"]);

// System DD Info in IPS Variablen schreiben

$HDDInfo=Sys_GetHardDiskInfo();
$HD=0;
while ($HD < $HDDInfo["NUMDRIVES"]){
 if ($initial) {
  $IpsIntVars=array($suffix."Hdd".$HD."TotalMem",$suffix."Hdd".$HD."FreeMem",);
  $IpsStrVars=array($suffix."Hdd".$HD."Letter",$suffix."Hdd".$HD."Label",);
  varfloatcheck($IpsIntVars);
  varstrcheck($IpsStrVars);
 }
  SetValueFloat($suffix."Hdd".$HD."TotalMem",round($HDDInfo["HDD".$HD]["TOTAL"]/1024/1024,0));
  SetValueFloat($suffix."Hdd".$HD."FreeMem",round($HDDInfo["HDD".$HD]["FREE"]/1024/1024,0));
  SetValueString($suffix."Hdd".$HD."Letter",(string)$HDDInfo["HDD".$HD]["LETTER"]);
  SetValueString($suffix."Hdd".$HD."Label",(string)$HDDInfo["HDD".$HD]["LABEL"]);
$HD=$HD+1;
}

function varfloatcheck($var){
$i=0;
while ($i < count($var)){
  if (!IPS_VariableExists($var[$i])) {
    if (IPS_CreateVariable((string)$var[$i],"Float")) {
      echo $var[$i]."/Float wurde angelegt
";
    }
    else {
       echo $var[$i]."/Float konnte nicht angelegt werden
";
    }
  }
  else {
    echo $var[$i]." existiert bereits
";
  }

$i=$i+1;
}
}

function varstrcheck($var){
$i=0;
while ($i < count($var)){
  if (!IPS_VariableExists($var[$i])) {
    if (IPS_CreateVariable((string)$var[$i],"String")) {
      echo $var[$i]."/String wurde angelegt
";
    }
    else {
       echo $var[$i]."/String konnte nicht angelegt werden
";
    }
  }
  else {
    echo $var[$i]." existiert bereits
";
  }

$i=$i+1;
}
}
?>

Vieleicht siehst Du ja das Problem.

Gruß
Oliver

Hall Paresy,

ich habe da nochmal eben genau getestet.

Wenn man den Befehl Sys_GetProcessInfo() öfter hintereinander ausführt, geht die Speicherausnutzung ca. 100k pro ausführung hoch.

Ich hoffe der Ansatz Reicht für dich.

@MSR und alle die das Script nutzen:

Bitte den Bereich // IPS Process Info in IPS Variablen schreiben so lange auskommentieren.

Danke
Gruß
Oliver

Danke… Das war der richtige Tipp… Die Funktion „Sys_GetProcessInfo();“ hat den Speicher geklaut gehabt… Ein Fix ist im LiveUpdate drin :slight_smile:

paresy

…ey super :slight_smile: Ihr seid ja schneller als der Schall :smiley:
Mal sehen was der Speicher jetzt macht :wink:

Besten Dank an euch beiden.

Gruß
Thomas

Hallo Paresy,

super besten Dank sieht gut aus bei mir.

Gruß
Oliver