Konfigurieren von Thread-Pools für Java-Webserver

1. Einleitung

In diesem Tutorial werfen wir einen Blick auf die Thread-Pool-Konfiguration für Java-Webanwendungsserver wie Apache Tomcat, Glassfish Server und Oracle Weblogic.

2. Server-Thread-Pools

Server-Thread-Pools werden von einem Webanwendungsserver für eine bereitgestellte Anwendung verwendet und verwaltet. Diese Thread-Pools befinden sich außerhalb des Webcontainers oder Servlets, sodass sie nicht derselben Kontextgrenze unterliegen.

Im Gegensatz zu Anwendungsthreads existieren Server-Threads auch nach dem Stoppen einer bereitgestellten Anwendung.

3. Apache Tomcat

Zunächst können wir den Server-Thread-Pool von Tomcat über die Executor- Konfigurationsklasse in unserer Datei server.xml konfigurieren :

minSpareThreads ist der kleinste Pool, auch beim Start. maxThreads ist der größte Pool, bevor der Server Anforderungen in die Warteschlange stellt.

Tomcat ist standardmäßig auf 25 bzw. 200 eingestellt. In dieser Konfiguration haben wir den Thread-Pool etwas kleiner als die Standardeinstellung gemacht.

3.1. Eingebetteter Kater

Ebenso können wir einen eingebetteten Tomcat-Server für Spring Boot ändern, um einen Thread-Pool zu konfigurieren, indem wir eine Anwendungseigenschaft festlegen:

server.tomcat.max-threads=250

Ab Boot 2.3 wurde die Eigenschaft geändert in:

server.tomcat.threads.max=250

4. Glasfisch

Als nächstes aktualisieren wir unseren Glassfish-Server.

Glassfish verwendet im Gegensatz zur Tomcat-XML-Konfigurationsdatei server.xml einen admin-Befehl . An der Eingabeaufforderung führen wir Folgendes aus:

create-threadpool

Wir können zu create-threadpool die Flags maxthreadpoolsize und minthreadpoolsize hinzufügen. Sie funktionieren ähnlich wie Tomcat minSpareThreads und maxThreads :

--maxthreadpoolsize 250 --minthreadpoolsize 25

Wir können auch angeben, wie lange ein Thread inaktiv sein kann, bevor er zum Pool zurückkehrt:

--idletimeout=2

Und dann geben wir am Ende den Namen unseres Thread-Pools an:

asadmin> create-threadpool --maxthreadpoolsize 250 --minthreadpoolsize 25 --idletimeout=2 threadpool-1

5. Weblogic

Oracle Weblogic bietet uns die Möglichkeit, einen selbstoptimierenden Thread-Pool mit einem WorkManager zu ändern.

Ähnlich wie bei Thread-Warteschlangen verwaltet ein WorkManager einen Thread-Pool als Warteschlange. Der WorkManager fügt jedoch dynamische Threads hinzu, die auf dem Echtzeitdurchsatz basieren. Weblogic analysiert regelmäßig den Durchsatz, um die Thread-Auslastung zu optimieren.

Was bedeutet das für uns? Dies bedeutet, dass der Webserver letztendlich entscheiden wird, ob neue Threads erzeugt werden sollen, während wir den Thread-Pool ändern können.

Wir können unseren Thread-Pool in der Weblogic Admin Console konfigurieren:

Aktualisieren des Self Tuning Mindest Thread Pool - Größe und Self Tuning Gewinde Maximale Poolgröße Werte gesetzt , die minimale und maximale Grenzen für die WorkManagers.

Beachten Sie die Werte für die maximale Zeit des festgefahrenen Gewindes und das Zeitintervall für festgefahrene Gewinde . Diese helfen dem WorkManager, feststeckende Threads zu klassifizieren.

Manchmal kann ein lang laufender Prozess dazu führen, dass sich festsitzende Threads ansammeln. Der WorkManager erzeugt zum Ausgleich neue Threads aus dem Thread-Pool. Jede Aktualisierung dieser Werte kann die Zeit verlängern, damit der Prozess abgeschlossen werden kann.

Festgefahrene Threads können auf Codeprobleme hinweisen. Daher ist es immer am besten, die Grundursache zu beheben, anstatt eine Problemumgehung zu verwenden.

6. Fazit

In diesem kurzen Artikel haben wir uns verschiedene Möglichkeiten zum Konfigurieren von Anwendungsserver-Thread-Pools angesehen.

Es gibt zwar Unterschiede in der Verwaltung der verschiedenen Thread-Pools durch die Anwendungsserver, sie werden jedoch mit ähnlichen Konzepten konfiguriert.

Denken Sie abschließend daran, dass das Ändern von Konfigurationswerten für Webserver keine geeigneten Korrekturen für Code mit schlechter Leistung und schlechte Anwendungsdesigns sind.