Configurazione di pool di thread per server Web Java

1. Introduzione

In questo tutorial, esaminiamo la configurazione del pool di thread per i server di applicazioni Web Java come Apache Tomcat, Glassfish Server e Oracle Weblogic.

2. Pool di thread del server

I pool di thread del server vengono utilizzati e gestiti da un server di applicazioni Web per un'applicazione distribuita. Questi pool di thread esistono all'esterno del contenitore web o del servlet, quindi non sono soggetti allo stesso limite di contesto.

A differenza dei thread dell'applicazione, i thread del server esistono anche dopo che un'applicazione distribuita è stata arrestata.

3. Apache Tomcat

Innanzitutto, possiamo configurare il pool di thread del server Tomcat tramite la classe di configurazione Executor nel nostro server.xml :

minSpareThreads è il più piccolo del pool, anche all'avvio. maxThreads è il più grande del pool prima che il server inizi a mettere in coda le richieste.

Tomcat imposta questi valori predefiniti rispettivamente su 25 e 200. In questa configurazione, abbiamo reso il pool di thread un po 'più piccolo di quello predefinito.

3.1. Tomcat incorporato

Allo stesso modo, possiamo modificare un server Tomcat incorporato per Spring Boot per configurare un pool di thread impostando una proprietà dell'applicazione:

server.tomcat.max-threads=250

A partire da Boot 2.3, la proprietà è cambiata in:

server.tomcat.threads.max=250

4. Glassfish

Successivamente, aggiorniamo il nostro server Glassfish.

Glassfish utilizza un comando di amministrazione in contrasto con il file di configurazione XML di Tomcat, server.xml. Dal prompt, eseguiamo:

create-threadpool

Possiamo aggiungere a create-threadpool i flag maxthreadpoolsize e minthreadpoolsize. Essi funzionano in modo simile a Tomcat minSpareThreads e maxThreads :

--maxthreadpoolsize 250 --minthreadpoolsize 25

Possiamo anche specificare per quanto tempo un thread può essere inattivo prima di tornare al pool:

--idletimeout=2

E poi, forniamo il nome del nostro pool di thread alla fine:

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

5. Weblogic

Oracle Weblogic ci offre la possibilità di modificare un pool di thread di auto-regolazione con un WorkManager.

Analogamente alle code di thread, un WorkManager gestisce un pool di thread come una coda. Tuttavia, WorkManager aggiunge thread dinamici basati sulla velocità effettiva in tempo reale. Weblogic esegue regolarmente analisi sul throughput per ottimizzare l'utilizzo dei thread.

Cosa significa questo per noi? Significa che mentre possiamo alterare il pool di thread, il server web alla fine deciderà se generare nuovi thread.

Possiamo configurare il nostro pool di thread nella console di amministrazione di Weblogic:

Aggiornando i valori di Dimensione pool di thread minima per l'ottimizzazione automatica e Dimensione pool massima di thread per l'ottimizzazione automatica , vengono impostati i limiti minimo e massimo per i WorkManager.

Notare i valori Tempo massimo filo bloccato e Intervallo timer filo bloccato . Questi aiutano il WorkManager a classificare i thread bloccati.

A volte un processo di lunga durata può causare un accumulo di thread bloccati. Il WorkManager genererà nuovi thread dal pool di thread per compensare. Qualsiasi aggiornamento a questi valori potrebbe prolungare il tempo per consentire il completamento del processo.

I thread bloccati potrebbero essere indicativi di problemi di codice, quindi è sempre meglio affrontare la causa principale piuttosto che utilizzare una soluzione alternativa.

6. Conclusione

In questo rapido articolo, abbiamo esaminato diversi modi per configurare i pool di thread del server delle applicazioni.

Sebbene esistano differenze nel modo in cui i server delle applicazioni gestiscono i vari pool di thread, vengono configurati utilizzando concetti simili.

Infine, ricordiamo che la modifica dei valori di configurazione per i server Web non è una correzione appropriata per codice con prestazioni scadenti e progetti di applicazioni scadenti.