Limiter le nombre de traitements en parallèle d'une servlet
-
06-07-2019 - |
Question
Nous avons une servlet qui occupe plus de mémoire virtuelle sur le serveur lors du téléchargement de fichiers. Pour cette raison, nous aimerions limiter les demandes simultanées à ce serveur, par exemple, nous ne voudrions que 10 demandes traitées en parallèle. Nous voudrions que d’autres demandes attendent dans la file d’attente.
Peut-on créer un pool de threads personnalisé et le configurer pour définir le nombre maximal de threads et l'affecter à ce servlet pour gérer ce scénario? Nous utilisons WebLogic Server 9.2. Ou y a-t-il une autre meilleure approche pour le faire? Appréciez vos pensées.
Si nous pouvions configurer un servlet distinct et que le pool de threads n'autorise que le nombre X de demandes simultanées, toutes les autres demandes seraient placées en file d'attente pour utiliser le prochain servlet disponible. Cette approche génère-t-elle une erreur de délai d'attente? Pouvez-vous s'il vous plaît partager plus de détails à ce sujet? Merci
La solution
Un pool de threads personnalisé peut-il être créé et attribué à ce servlet pour gérer ce scénario? Nous utilisons WebLogic Server 9.2. Ou y a-t-il une autre meilleure approche pour le faire? Appréciez vos pensées.
Oui, c'est possible. Au lieu d'utiliser le gestionnaire de travaux autoréglable par défaut (à partir de Weblogic 9.x, les files d’exécution sont remplacées par des gestionnaires de travail pour les pools de threads 1 ), vous pouvez créer un gestionnaire de travail avec un comme la max-threads-contrainte
éventuellement la capacité
. Vous pouvez ensuite affecter un servlet à un gestionnaire de travaux spécifique à l'aide de wl-dispatch-policy du fichier de descripteur de déploiement weblogic.xml
.
1 Notez qu'il est toujours possible de activer le modèle de pool de threads WebLogic 8.1 et utiliser des files d'attente d'exécution.