PHP Informationen

Hallo,

leider kann ich über die PHP-Infos nichts finden.

Ich habe immer wieder in den PHP Informationen einen „roten“ Thread der anscheinend schon seit mehreren Tagen hängt.

Es ist niemals das gleiche Skript darum gehe ich davon aus dass es in Ordnung ist.

IPS kann ich auf dem normalen Weg nicht mehr beenden.

Was bedeutet die rote Farbe?
Wie kann ich den Thread beenden?
Normalerweise werden die Skripts nach 150sec abgebrochen oder? (max_execution_time = 150)

Der Wert steht entweder in der php.ini oder wird manuell im Script eingestellt. Eins Script sollte aber niemals so lange laufen, dann ist eher meist die Logik dahinter falsch. Hast Du evtl. in den rot markierten Threads einen include der das Script zum hängen bringt? Beenden kannst Du das, wenn IPS den Thread nicht selber freigibt, nur durch Neustart des Dienstes. Hier ist Fehlersuche angesagt.

Hallo Ferengi,

Eins Script sollte aber niemals so lange laufen,

Warum bricht IPS den Thread nicht ab?

dann ist eher meist die Logik dahinter falsch.

Das glaube ich nicht denn es hängt jedesmal ein anderes Skript. Außerdem läuft das System oft tagelang ohne Probleme.

Hast Du evtl. in den rot markierten Threads einen include der das Script zum hängen bringt?

Nein.

Beenden kannst Du das, wenn IPS den Thread nicht selber freigibt, nur durch Neustart des Dienstes.

Dienst kann ich nicht neustarten. Ich muss den Dienst mit dem Taskmanager hart beenden.

Hier ist Fehlersuche angesagt.

Ich glaube es ist ein Bug in IPS da das System oft tagelang super läuft.

Wie sieht es denn mit der Speicher- und Prozessorlast des IPS-Dienstes aus?

Ist im Logfile auch etwas zu sehen?

Ich schaue zwar nicht so oft in die PHP-Informationen aber soetwas hatte ich noch nie.

Die Idee von Werner ist evtl. auch eine gute Spur, vieleicht braucht IPS irgendwann zu viele Resourcen zum bearbeiten der Scripte.

Das hatte ich auch schon mal in Gedanken.

Dann habe ich meinen Arbeitsspeicher erhöht- ohne Erfolg.

Die Idee von Werner ist evtl. auch eine gute Spur, vieleicht braucht IPS irgendwann zu viele Resourcen zum bearbeiten der Scripte.

Aber wie bekomme ich das raus?

Benutzt du in den Skripte die hängen geblieben sind irgendwelche Funktionen wie z.B. file, file_get_contents oder andere Funktionen die was mit Netzwerk zu tun haben?

paresy

Hallo paresy,

eigentlich nicht:

<?
RegVar_SendText(57819 /*[Zuhaus\LCN\Register\Register Variable Socket senden]*/,$IPS_VALUE); //nur für Registervariable

SetValueString(58146 /*[Zuhaus\LCN\Register\PCK]*/,$IPS_VALUE);      // nur String in eine Variable schreiben


$str = explode('.', $IPS_VALUE);                                 //%M000006.01251 Zählerstring in ein Array schreiben
//print_r ($str);
if ($str[0] == "%M000006")                                        // wenn Modul 6
	{
	//echo "es hat geklapt";
	SetValueInteger(50141 /*[Zuhaus\LCN\Stromzähler\Umdrehungszähler LCN]*/,(int)$str[1]);      // Zählerstand in Integer umwandeln und in eine Var schreiben
	}

?>
<?
<?
function TextboxListe($ID,$wert,$menge){
    //Funktion zur Listenerstellung von Attain (ID , aktuellerWert , Menge der zu berücksichtigenden Werte)
   $object = IPS_GetObject($ID);
  // echo $object['ObjectInfo'];
    $buffer = explode("
",$object['ObjectInfo'],$menge);
   array_unshift ($buffer, $wert);                           // neuen Messwert ins Array eintragen
   $buffer = array_slice ( $buffer, 0, $menge );       // alten Wert abschneiden
    $string = implode("
",$buffer);
   IPS_SetInfo($ID,$string);                               // im Infobereich der Variablen, das Array ablegen
   SetValue($ID,$string);                                  // Variable beschreiben
   return ($string);
}

if ($IPS_VARIABLE == 42993 /*[Überwachung\Warnung (aktuell)]*/)
{
$file = IPS_GetKernelDir()."webfront/Warnung.wav";
TTS_GenerateFile(49696 /*[Sonstiges\Text To Speech]*/, $IPS_VALUE, $file, 6);
$ID = 38044 /*[Überwachung\Warnungen]*/;
//echo "Achtung: ".$IPS_VALUE."<embed src =\"Warnung.wav\" hidden=\"true\" autostart=\"true\"></embed>";
WFC_SendPopup(42002 /*[WebFront Configurator]*/,'ACHTUNG','<h1>'.$IPS_VALUE.'</h1><embed name="Musiktitel" src="Warnung.wav" border="2" width="164" height="25" autostart="true" Delay="0" VOLUME="100" loop="false" controls="smallconsole">');
//TTS_Speak(49696 /*[Sonstiges\Text To Speech]*/,$IPS_VALUE,false);    // bei Warnung vorlesen
}

if ($IPS_VARIABLE == 31054 /*[Überwachung\Meldung (aktuell)]*/)
{
$ID = 19563 /*[Überwachung\Meldungen]*/;
//TTS_Speak(49696 /*[Sonstiges\Text To Speech]*/,$IPS_VALUE,false);
}

$string = date("d.m. H:i:s"). " - ".$IPS_VALUE;
$menge = 30;      // Zeilen

//WFC_SwitchPage(42002 /*[WebFront Configurator]*/,"Warnungen");       // auf Warnungsfenster umschalten
SetValueInteger(29774 /*[Sonstiges\Tab]*/,6);
TextboxListe($ID,$string,$menge);




?>

Das sind jetzt nur 2 Beispiele. Ich muss das mal Beobachten.

Kann man den mit Sys_GetProcessInfo(); eine vernünftige Fehlersuche machen?

Kann mir die Ausgabe jemand Erklären?

Threads3.jpg

Da ich keine Antwort bekomme schließe ich daraus dass das keiner Weiß.:frowning:

oder andere Funktionen die was mit Netzwerk zu tun haben?

Gibt es eine Möglichkeit das Netzwerk zu überwachen?

Hallo zusammen
Ich wollte das Thema nochmal aufgreifen ich habe auch ein Skript das sich alle paar Tage mal aufhängt vieleicht kann mir da ja Jemand helfen.

<?
if (IPS_SemaphoreEnter("KritischerPunkt", 1000))
{
  // ...Kritische Befehle ausführen
RegVar_SetBuffer(43289 /*[Heizung\Heizung]*/,"");
IPS_Sleep(500);


COMPort_SendText(42709 /*[Siemens Heizung]*/, "1800" .chr(13).chr(10));

  //Semaphore wieder freigeben!
IPS_SemaphoreLeave("KritischerPunkt");

}
else
{
return; //IPS_ScriptThreadExists(2); // ...Keine ausführung Möglich. Ein anderes Skript nutzt den "KritischenPunkt" für länger als 1 Sekunde, sodass unsere Wartezeit überschritten wird.

}


?>

Ich hatte genau dasselbe „Problem“… es stört mich nicht jedoch hatte ich auch nahezu dauerhaft 60-90 Prozent auf der CPU. Sobald ich jedoch den Haken „letzte Aktion auswerten“ entferne verschwindet auch im PHP Info Log die Alexa einträge. Ich hatte zuvor erstmal mit der aktualisierungsvariable gespielt und diese auf 30 Sekunden gesetzt und mich gewundert, weshalb immer noch im Sekundentakt etwas auftaucht. Wofür ist dieser Schalter? Wahrscheinlich sehe ich dann nicht mehr, welchen Befehl Alexa zuletzt ausgeführt hat oder? Kann man das nicht auch mit einem Zeitzyklus versehen? (der ggf. nicht jede Sekunde beträgt)

Ich bin mir gerade nicht sicher welchen „Haken du meinst“. Wo ist dieser genau?

paresy