2010-09-09 5 views
2
trafic

Quand mon maxThreads tomcat (6.0.20) limite est atteinte, je reçois l'erreur attendue:Tomcat ne pas récupérer de l'excès

Maximum number of threads (XXX) created for connector with address null and port 80

Et puis demande commence à accrocher la file d'attente et, éventuellement, du délai. jusqu'ici tout va bien. Le problème est que lorsque la charge diminue, le serveur ne se rétablit pas et est paralysé à jamais, au lieu de revenir à la vie.

Des indices?

Répondre

5

Envisager de passer à NIO, alors vous n'avez pas besoin de vous soucier de l'exigence technique de 1 thread par connexion. Sans NIO, la limite est d'environ 5K threads (5K connexions HTTP), alors ça souffle comme ça. Avec NIO, Java sera capable de gérer plusieurs ressources par un seul thread, donc la limite est beaucoup plus élevée. La bordure est pratiquement la mémoire de tas disponible, avec environ 2 Go, vous pouvez aller jusqu'à 20K connexions.

Configuration Tomcat pour utiliser NIO est aussi simple que de changer l'attribut de l'élément <Connector> dans /conf/server.xml à "org.apache.coyote.http11.Http11NioProtocol".

+0

J'ai considéré que, mais je ne Je ne sais pas si cela endommagerait les classes qui s'appuient sur ThreadLocal, comme Spring OpenSessionInViewFilter. –

+0

Si ces classes sont bien écrites qu'il utilise 'ThreadLocal # remove()' dans le bon sens, alors je n'ai pas de problèmes. Plus encore, les threads pour les requêtes de servlet HTTP sont déjà regroupés par défaut. Dans les environnements de production réels, NIO est plus que souvent activé. – BalusC

+1

@Julio Faerman ce n'est pas – nos

Questions connexes