Dokumentation
UC_GetKernelStatistics
array UC_GetKernelStatistics (int $InstanzID)
Parameterliste
| InstanzID | ID zum Util Control |
Rückgabewert
Ein Array mit folgenden key => value Paaren:
| Index | Typ | Beschreibung |
|---|---|---|
| MessageCounter | integer | Anzahl der Nachrichten, die seit dem Start von IP-Symcon in die Nachrichtenwarteschlange des Kernels gestellt wurden |
| MessageQueueDelay | integer | Wartezeit der ältesten noch nicht verteilten Nachricht in Millisekunden (0, wenn die Warteschlange leer ist) |
| MessageQueueSize | integer | Anzahl der Nachrichten, die aktuell in der Nachrichtenwarteschlange des Kernels auf ihre Verteilung warten |
| MessageSlowCounter | integer | Anzahl der Nachrichten, deren Verarbeitung in einem Kernel-Bestandteil länger als "MessageQueueWatchLimit" dauerte. Nur mit aktiviertem "MessageQueueWatch", sonst immer 0 |
| RequestQueueSize | integer | Anzahl der Skriptausführungen, die aktuell auf einen freien PHP-Thread warten |
Beschreibung
Die Funktion liefert Kennzahlen, mit denen sich die Auslastung des Kernels beurteilen lässt. Alle Ereignisse im System (Variablenaktualisierungen, Statusänderungen, Log-Meldungen, ...) werden als Nachrichten in eine Warteschlange gestellt und von dort an alle Empfänger verteilt. Steigen MessageQueueSize und MessageQueueDelay dauerhaft an, entstehen mehr Nachrichten, als verarbeitet werden können. Die Ursache lässt sich mit UC_GetMessageTypeList (welche Nachrichten) und UC_GetMessageSenderIDList (welche Objekte) eingrenzen. Ein dauerhaft hoher Wert von RequestQueueSize bedeutet, dass mehr Skripte gestartet werden, als PHP-Threads zur Verfügung stehen.
MessageCounter zählt seit dem Start von IP-Symcon, die Rate ergibt sich aus der Differenz zweier Abfragen. MessageSlowCounter wird nur erhöht, wenn der Spezialschalter "MessageQueueWatch" aktiviert ist (z.B. über IPS_SetOption); die Grenze legt "MessageQueueWatchLimit" fest (Standard 50 Millisekunden). Die Verarbeitung durch die einzelnen Instanzen erfasst IPS_GetInstanceMessageStatistics, deren Warteschlangen liefert IPS_GetInstanceMessageQueueSize.
Die ID der Util Control Instanz liefert z.B. IPS_GetInstanceListByModuleID mit der Modul-GUID {B69010EA-96D5-46DF-B885-24821B8C8DBD}. Existiert InstanzID nicht, schlägt die Funktion mit "Instance #... does not exist" fehl, gehört die Instanz zu einem anderen Modul, mit "Instance does not implement this function".
Beispiel
// ID der Util Control Instanz ermitteln
$id = IPS_GetInstanceListByModuleID('{B69010EA-96D5-46DF-B885-24821B8C8DBD}')[0];
print_r(UC_GetKernelStatistics($id));
/* liefert z.B.:
Array
(
[MessageCounter] => 184
[MessageQueueDelay] => 0
[MessageQueueSize] => 0
[MessageSlowCounter] => 0
[RequestQueueSize] => 0
)
*/
// Nachrichten pro Sekunde ermitteln
$before = UC_GetKernelStatistics($id)['MessageCounter'];
sleep(10);
$after = UC_GetKernelStatistics($id)['MessageCounter'];
echo 'Nachrichten pro Sekunde: ' . (($after - $before) / 10);