Einführung
Einführung

Einführung / FirstSpirit JMX-Konsole / ExecutionManager

ExecutionManager

In FirstSpirit wird eine Vielzahl von Aktionen parallel im Hintergrund ausgeführt. Dazu gehört beispielsweise das Aktualisieren des Refrenzgraphs, das Abarbeiten von Client-Calls oder auch das Indizieren von Dokumenten. Die Ausführung dieser Aktionen erfolgt über den ExecutionManager.

Klassifizierung der Thread Queues

Der ExecutionManager verwaltet eine Vielzahl von unterschiedlich klassifizierten Thread-Queues. In einer Thread-Queue werden die unterschiedlichen Tasks (beispielsweise Client-Calls) bis zu ihrer Ausführung gesammelt. Thread-Queues können abhängig von ihrer Klassifikation konfiguriert werden:

ThreadQueue.SERIAL: In die mit SERIAL klassifizierten Queues werden Tasks gestellt, die nicht parallel ausgeführt werden können. Da immer nur ein Task gleichzeitig ausgeführt wird, ist eine Begrenzung der Queue über die Konfiguration hier nicht notwendig.

ThreadQueue.LOW: In die mit LOW klassifizierten Queues werden speicher- oder rechenintensive Tasks gestellt, von denen jeweils nur eine geringe Anzahl gleichzeitig ausgeführt werden soll (Standardwert 2). Ein Beispiel hierfür ist das Indizieren von Dokumenten. Die Anzahl der Tasks, die gleichzeitig ausgeführt werden dürfen, kann über den Parameter maxRunning definiert werden.

ThreadQueue.DEFAULT: DEFAULT ist die Standard-Klassifikation einer Queue. In eine mit DEFAULT klassifizierte Queue werden alle Tasks gestellt, die nicht einer der anderen klassifizierten Queues zugeordnet sind. Die Anzahl der Tasks, die gleichzeitig ausgeführt werden dürfen, kann über den Parameter maxRunning definiert werden.

ThreadQueue.HIGH: Die mit HIGH klassifizierte Queue dient allen Tasks, die direkt ausgeführt werden sollen. Dabei handelt es sich beispielsweise um hochpriorisierte Client-Calls (z. B. ping). Auch hier ist eine Konfiguration nicht notwendig.

ThreadQueue.BOUNDED: In die mit BOUNDED klassifizierte Queue werden ausschließlich Server Calls der Clients gestellt. Diese Queue kann zweifach begrenzt werden. Es kann sowohl die Anzahl der aktiven Tasks, als auch die Aufnahmekapazität der Queue eingeschränkt werden. Ist die maximale Aufnahmekapazität der Queue erreicht, werden weitere Client-Calls vom Server kurzfristig zurückgewiesen, bevor ein weiterer Versuch gestartet wird (Rejection-Strategie).

Verarbeitung innerhalb des ExecutionManagers

Das folgende Schaubild verdeutlicht die Ausführung der Tasks im ExecutionManager. Die hier beschriebenen Werte stehen innerhalb der JMX-Konsole (siehe Attribute) und teilweise innerhalb des FirstSpirit ServerMonitorings zur Verfügung:

Attribute

ExecutionRate: Anzahl der ausgeführten Tasks, innerhalb der letzten 60 Sekunden.

LastStartedTasks: Zeigt die letzten, gestarteten Tasks (String-Array).

ScheduledTasks: Zusätzlich zu den durch Benutzeraktionen ausgelösten Events, gibt es regelmäßige, interne Aktionen. Beispielsweise wird einmal pro Minute geprüft, ob eine Session weiterhin gültig oder bereits abgelaufen ist. Der Wert gibt die Anzahl aller regelmäßig anstehenden Aktionen wieder.

TasksActive: Eine zwischengespeicherte, interne Aktion (vgl. TasksQueued) wird aus der Queue weitergereicht an die zweite Verarbeitungsebene des ExecutionManagers. Der entsprechende Task ist dann aktiv, wird aber noch nicht ausgeführt, sondern wandert in den (limitierten) ThreadPool. Die Anzahl der möglichen aktiven Tasks, die aus der Queue in den ThreadPool gelangen, kann über den Parameter maxRunning begrenzt werden.

TasksQueued: Wird intern eine Aktion angestoßen, beispielsweise eine Indizierung, dann wird der entsprechende Task zuerst zwischengespeichert. Der hier dargestellte Wert gibt die Anzahl der momentan zwischengespeicherten Aktionen wieder.

TasksEscaped: Gibt die Anzahl der Tasks an, die aufgrund einer vollen Queue außerhalb ihrer eigentlichen Queue ausgeführt werden.
Hintergrund: Die Queues des ExecutionManagers arbeiten mit einer Rejection-Strategie: ist eine Queue „bounded“, also in ihrer Größe beschränkt, werden darüber hinaus abgesetzte Tasks an die Rejection-Strategie übergeben. Der aufrufende Thread stellt seinen Task in die Queue und führt dafür den ältesten Eintrag selbst aus. Solche Tasks heißen „escaped“, da sie nicht über ihre eigentliche Queue ausgeführt werden. Die „überlastete“ Queue bedient sich sozusagen der aufrufenden Threads und die „aktiven“ Tasks der Queue übersteigen „maxRunning“. Die Queue-Kapazität kann innerhalb der Konfigurationsdatei fs-server.conf definiert werden.

TasksRunning: Anzahl der momentan laufenden Aktionen (beispielsweise ein Indizierungsjob oder ein Event) innerhalb des limitierten und unlimitierten ThreadPools. Die Anzahl der parallel ausgeführten Tasks (über den limitierten ThreadPool) kann über den Parameter maxSize begrenzt werden.

TasksWaiting: Anzahl der Aktionen, die bereits aus der entsprechenden Queue weitergeleitet wurden, aber noch auf die Ausführung innerhalb des ThreadPools warten.

TotalExecuted: Die Gesamtanzahl der ausgeführten Aktionen.

ExecutionManager – Queues

ExecutionQueues: Der Eintrag ExecutionQueues stellt eine Übersicht zu allen Warteschlangen (Queues) der unterschiedlichen Manager zur Verfügung. Mit einem Doppelklick auf den Eintrag oder über die Navigation im linken Fensterbereich können die aktuellen Warteschlangen angezeigt werden.

Jeder Eintrag beinhaltet die folgenden Informationen:

Name der Queue: Der Name setzt sich zusammen aus:

  • der ID der Queue
  • dem Namen des Managers, der die Queue verwendet
  • der Projekt-ID. (Dieser Wert ist optional. Manche Manager, beispielsweise der ReferenceManager, erzeugen pro Projekt eine Queue.)
  • der Queue-Klasse. Mögliche Klassen sind LOW, HIGH SERIAL, BOUNDED, DEFAULT (siehe Klassifizierung der Thread Queues). Einige Queue-Klassen können über die Konfigurationsdatei fs-server.conf parametrisiert werden.

Anzahl der aktiven Threads: Anzahl der aktiven Threads [a: Anzahl], die aus der Queue an den ThreadPool weitergereicht werden (vgl. TasksActive).

Anzahl der zwischengespeicherten Tasks: Anzahl der zwischengespeicherten Threads [q: Anzahl], die innerhalb der Queue auf ihre Ausführung warten (vgl. TasksQueued).

Anzahl der parallel ausführbaren Tasks: Anzahl der Tasks, die gleichzeitig ausgeführt werden dürfen, [m: Anzahl] (vgl. maxRunning).

Anzahl der erlaubten zwischengespeicherten Tasks: Anzahl der Tasks [c: Anzahl], die innerhalb einer „Bounded“-Queue zwischengespeichert werden dürfen (vgl. queueCapacity)

Anzahl der aktuell ausgeführten Tasks: Anzahl der momentan laufenden Tasks [r: Anzahl] (beispielsweise ein Indizierungsjob oder ein Event) innerhalb des limitierten und unlimitierten ThreadPools (vgl. TasksRunning).

Anzahl der wartenden Threads: Anzahl der zwischengespeicherten Threads [w: Anzahl], die aus der Queue an den ThreadPool weitergereicht, aber noch nicht ausgeführt wurden (vgl. TasksWaiting).

© 2005 - 2020 e-Spirit AG | Alle Rechte vorbehalten. | FirstSpirit 2020-07 | Datenschutz | Impressum | Kontakt