Je travaille sur une application web Java pour tomcat6 qui propose des fonctionnalités de suggestion. Cela signifie qu'un utilisateur tape un texte libre et obtient des suggestions pour compléter sa contribution. Il est essentiel que l'application web doit réagir très rapidement pour avoir un sens.Comment hiérarchiser des threads spécifiques dans tomcat
Cette application Web propose des suggestions de données pouvant être modifiées à tout moment. Si de nouvelles données sont disponibles, l'index de suggestion sera créé entièrement en arrière-plan à l'aide d'un fil de démon. Si le processus de préparation des données est terminé, l'ancien index est supprimé et le nouvel index entre en jeu. Cela offre l'avantage de ne pas manquer de service.
Le processus d'arrière-plan pour la préparation des données coûte beaucoup d'énergie CPU. Cela provoque le blocage du service parfois pendant plus d'une seconde, ce qui rend le service moins utilisable et cause une mauvaise expérience utilisateur. Ma première tentative pour résoudre le problème consistait à mettre en pause tous les threads de préparation des données d'arrière-plan, lorsqu'une requête devait être traitée. Cette tentative réduit un peu le problème, mais le service n'est toujours pas fluide. Il n'est pas que le morceau de code pour générer les suggestions elle-même devient plus lent, mais il semble que Tomcat ne démarre pas le fil de la demande immédiatement tout le temps en raison de la charge élevée dans d'autres discussions (je suppose)
Je n'ai aucune idée de comment faire face à ce problème. Puis-je interagir avec le planificateur de thread de tomcat et lui dire de forcer l'exécution des demandes? Comme prévu, l'ajustement de la priorité du fil n'a pas aidé non plus. Je n'ai pas trouvé d'options de configuration pour Tomcat qui offrent de l'aide. Ou n'y a-t-il aucun moyen de faire face à cela et je dois modifier le concept de logiciel? Je suis impuissant. Avez-vous des conseils pour ma façon de faire face à ce problème?
JanP
Avez-vous réglé les tâches d'arrière-plan sur une priorité inférieure? – Jes
Oui, j'ai réduit les tâches d'arrière-plan à la priorité la plus basse. Mais cela n'a pas aidé. La priorité des threads est juste un indice pour le planificateur, donc je ne m'attendais pas à une grande aide de cette optimisation. Ce que je veux, c'est suspendre immédiatement tous les threads d'arrière-plan lorsqu'une requête utilisateur arrive. –
Créez-vous vos propres threads pour le traitement en arrière-plan, ou utilisez le thread existant créé par tomcat pour gérer la requête web? – mdma