![[z/OS]](../images/ngzos.gif)
Einstellungen für die MDB-Regulierung unter z/OS
Sie können verschiedene Einstellungen für die "MDB-Regulierung" anpassen, um den Umfang der MDB-Anforderungen, die der Server zu einem bestimmten Zeitpunkt verarbeiten soll, zu steuern.
MDB-Regulierung - oberer und unterer Schwellenwert
Die Unterstützung der MDB-Regulierung verwaltet die aktuelle Anzahl unvollständiger Nachrichten für die einzelnen Listener-Ports.
- Wenn der Wert für die Anzahl der unvollständigen Nachrichten kleiner-gleich dem oberen Schwellenwert ist, wird ein Arbeitssatz in die WLM-Warteschlange gestellt.
- Überschreitet der Wert für die Anzahl der unvollständigen Nachrichten den oberen Schwellenwert, wird der Thread des Warteschlangenagenten, der den Nachrichtenreferenzhandler ausführt, blockiert, geht in einen Wartestatus. In diesem Fall spricht man von einer "blockierten" Regulierung.
Der Wert für die Anzahl der unvollständigen Nachrichten wird immer, wenn der Controller benachrichtigt wird, dass ein Arbeitssatz für diesen Listener-Port abgeschlossen ist, um den Wert 1 herabgesetzt (unabhängig davon, ob die Transaktion der Anwendung festgeschrieben wurde). Danach wird der Wert für die Anzahl der unvollständigen Nachrichten mit dem unteren Schwellenwert für diesen Listener-Port verglichen. Wenn die Anzahl der unvollständigen Nachrichten auf den unteren Schwellenwert absinkt, wird der zuvor blockierte Thread des Warteschlangenagenten aktiviert (benachrichtigt). An diesem Punkt können neue Arbeitssätze in die WLM-Warteschlange gestellt werden, und die Regulierung wird "freigegeben".
Der untere und der obere Schwellenwert werden extern durch eine Einstellung bestimmt, den Parameter Maximale Anzahl von Sitzungen für den Listener-Port. Intern wird der obere Schwellenwert auf den extern definierten Wert für Maximale Anzahl von Sitzungen gesetzt. Der untere Schwellenwert wird mit intern mit folgender Formel berechnet und gesetzt: unterer Schwellenwert = (oberer Schwellenwert / 2), wobei der Wert auf das nächste Integer abgerundet wird.
- Der Controller beginnt, eine andere Nachricht zu verarbeiten. Der Zähler für unvollständige Nachrichten ist auf 3 gesetzt. Dieser Wert überschreitet den oberen Schwellenwert und führt dazu, dass der Thread des Controllers angehalten wird, bis der niedrigere Schwellenwert erreicht wurde.
- Die MDB im Servant für die erste Nachricht wird zurückgegeben und der Zähler für unvollständige Nachrichten wird von 3 auf 2 gesenkt. Damit ist jedoch der unterer Schwellenwert noch nicht erreicht.
- Die MDB im Servant für die zweite Nachricht wird zurückgegeben und der Zähler für unvollständige Nachrichten wird von 2 auf 1 gesenkt. Der untere Schwellenwert wurde erreicht und die Verarbeitung von Nachrichten und die zugehörige Verteilung an die Servantregion wird fortgesetzt.
Wenn der Nachrichten-Listener-Service mit der angepassten Eigenschaft MDB.THROTTLE.THRESHOLD.LOW.EQUALS.HIGH definiert und auf den Wert "true" gesetzt wurde, wird der untere Schwellenwert intern auf den oberen Schwellenwert gesetzt (der extern über die Eigenschaft "Maximale Anzahl von Sitzungen" des Listener-Ports gesetzt wird).
MDB-Regulierung - Hinweise zur Optimierung
Sie sollten den Wert "Maximale Anzahl von Sitzungen" für den Listener-Port so festlegen, dass er doppelt so hoch ist wie die Anzahl der Worker-Threads in allen Servants im skalierbaren Server (2*WT). Wenn Sie Worker-Thread in einem Servant haben, möchten Sie diesen Thread nicht aufgrund einer blockierten MDB-Regulierung inaktiv lassen. Mit anderen Worten, Sie möchten keine leere WLM-Warteschlange, einen verfügbaren Servant-Worker-Thread und eine blockierte Regulierung haben.
- Es gibt einen freien Servant-Worker-Thread.
- Die WLM-Warteschlange ist leer.
- Es gibt eine Nachrichtenreferenz, die durchsucht wurde, für die jedoch keine Verarbeitungsanforderung zur WLM-Warteschlange hinzugefügt wurde (stattdessen wurde die Regulierung blockiert).
Wenn Sie den oberen Schwellenwert auf 2*(WT+N) setzen, können Sie außerdem sicherstellen, dass in dem Moment, in dem ein Worker-Thread die Regulierung freigibt, ein Rückstand von N vorverarbeiteten Nachrichten in der WLM-Warteschlange auf die Zuteilung wartet. Ein sehr hoher Wert würde jedoch zu einer Überlastung der WLM-Warteschlange führen, die durch die Regulierung eigentlich verhindert werden sollte. Diese Hinweise zur Optimierung setzen voraus, dass die Warteschlange (oder das Topic) vollständig mit zu verarbeitenden Nachrichten gefüllt ist.
Wenn Sie den oberen Schwellenwert erhöhen, kann der Server einen kleinen Rückstand vorverarbeiteter Nachrichten in der WLM-Warteschlange aufbauen, falls der Workload einen Spitzenwert erreicht. Eine Erhöhung des oberen Schwellenwerts erhöht jedoch auch das Risiko, dass ein Arbeitssatz für eine bestimmte Nachricht das Zeitlimit überschreitet, bevor die Anwendung mit der entsprechenden Nachricht zugeteilt werden kann. Das heißt, der Server könnte das MDB-Zeitlimit überschreiten. Die angegebene Nachricht wird schließlich zurück an den Server geliefert, allerdings erst später, und die Verarbeitung, die bis dahin stattgefunden hat, wäre verloren. Ein sehr hoher Schwellenwert würde die MDB-Regulierungsfunktion effektiv umgehen, was zunächst eine Überlastung der WLM-Warteschlange und dann möglicherweise einen Serverausfall zur Folge hätte.
MDB-Regulierung - Alternative Hinweise zur Optimierung
Obwohl der skalierbare Server mit dem Ziel entworfen wurde, den Durchsatz zu erhöhen, ist es möglich, die Einstellungen für den Listener-Port zu verwenden, um andere Ziele im Rahmen des Workflow-Management zu erreichen.
Beispielsweise garantiert ein hoher Schwellenwert von '1', dass Nachrichten in der Reihenfolge verarbeitet werden, in der sie am Ziel empfangen werden.
Möglicherweise gibt es in einem Business auch weitere wichtige Gründe, Kapazität und andere Faktoren, einen bestimmten Listener-Port auf eine wesentlich niedrigere Parallelität zu beschränken, als der Server eigentlich unterstützt. Dabei handelt es sich zwar um eine unterstützte Konfiguration, die aber dazu führen kann, dass die Regulierung blockiert wird, wenn inaktive Worker-Threads verfügbar sind.
Beispiel für MDB-Regulierung
Nehmen Sie an, Ihr Server ist so konfiguriert, dass der Wert für die maximale Anzahl der Serverinstanzen auf '3' gesetzt ist und das Workload-Profil IOBOUND ausgewählt ist. Sie haben zwei CPUs, daher erstellt WebSphere Application Server in jedem Servant sechs Worker-Threads. Ihre Anwendung (eine einzelne MDB, die einer Warteschlange zugeordnet ist) verarbeitet jede Nachricht relativ schnell (damit das Risiko einer Zeitlimitüberschreitung sinkt), und Sie möchten, dass der gesamte Zeitraum vom Eintreffen einer angegebenen Nachricht in Ihrer MDB bis zum Ende der MDB-Zuteilung für diese Nachricht so kurz wie möglich ist.
Wenn Sie kurze Reaktionszeiten bei Lastspitzen wünschen, müssen Sie sich für einen größeren Rückstand entscheiden. Sie legen den Wert für die maximale Anzahl der Sitzungen für den Listener-Port mit der Formel 100 = 2 * (3 * 6 + 32) fest.