Maison  >  Article  >  Java  >  Comment résoudre le problème de la concurrence maximale prise en charge par Tomcat intégré à Springboot

Comment résoudre le problème de la concurrence maximale prise en charge par Tomcat intégré à Springboot

WBOY
WBOYavant
2023-05-22 20:21:503817parcourir

    Le Tomcat intégré de Springboot prend en charge la concurrence maximale

    Le Tomcat intégré de SpringBoot Dans les paramètres par défaut, le nombre maximum de threads de Tomcat est de 200 et le nombre maximum de connexions est de 10 000. Par défaut, la concurrence maximale prise en charge est de 10 000, ce qui signifie le nombre de connexions prises en charge.

    Tomcat dispose de deux modes de traitement des connexions

    1 est BIO, et un thread ne gère qu'une seule connexion Socket

    2 est NIO. un thread gère plusieurs connexions Socket.

    Un seul thread gérant plusieurs connexions ne pose généralement pas trop de problèmes, car les requêtes HTTP ne prennent pas trop de temps et plusieurs connexions n'envoient généralement pas de messages en même temps. Un thread traitant plusieurs connexions sera très lent et peut expirer

    Configuration Tomcat intégrée par défaut

    • server.tomcat.accept-count : longueur de la file d'attente, lorsque le nombre de threads qui peut être alloué Une fois que toutes sont épuisées, les demandes suivantes entreront dans la file d'attente pour attendre. Lorsque la file d'attente est pleine, le traitement sera refusé. server.tomcat.accept-count:等待队列长度,当可分配的线程数全部用完之后,后续的请求将进入等待队列等待,等待队列满后则拒绝处理,默认100。

    • server.tomcat.max-connections:最大可被连接数,默认10000

    • server.tomcat.max-threads:最大工作线程数,默认200,

    • server.tomcat.min-spare-threads

    server.tomcat.max-connections : nombre maximum de connexions, par défaut 10000

    server.tomcat.max-threads : nombre maximum de threads de travail , la valeur par défaut est 200,

    server.tomcat.min-spare-threads : le nombre minimum de threads de travail, le nombre de threads d'allocation initiale, la valeur par défaut est 10

    Sous Dans la configuration par défaut, une fois que le nombre de connexions dépasse 10 000, un refus de connexion se produira. la configuration par défaut ne peut pas répondre aux besoins actuels, vous pouvez la régler vous-même et modifier manuellement la configuration pour le traitement Concurrency

    Modifiez le fichier pro

    server.port=7001
    
    server.tomcat.accept-count=1000
    
    server.tomcat.max-connections=10000
    
    server.tomcat.max-threads=500
    
    server.tomcat.min-spare-threads=100

    Puis emballez et redémarrez le projet

    kill -9 9545 //Tuez le. process

    ps -ef | grep java //Afficher le port démarré par le projet

    pstree -p 7968 | wc -l //Vérifier le nombre de processus

    Nous pouvons également utiliser le fichier de configuration et ajouter la configuration du serveur Web. fichier java
      import org.apache.catalina.connector.Connector;
      
      import org.apache.coyote.http11.Http11NioProtocol;
      
      import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
      
      import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
      
      import org.springframework.boot.web.server.ConfigurableWebServerFactory;
      
      import org.springframework.boot.web.server.WebServerFactoryCustomizer;
      
      import org.springframework.stereotype.Component;
      
      
      //当Spring容器内没有TomcatEmbeddedServletContainerFactory这个bean时,会吧此bean加载进spring容器中
      
      @Component
      
      public class WebServerConfiguration implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> {
      
          @Override
      
          public void customize(ConfigurableWebServerFactory configurableWebServerFactory) {
      
                  //使用对应工厂类提供给我们的接口定制化我们的tomcat connector
      
              ((TomcatServletWebServerFactory)configurableWebServerFactory).addConnectorCustomizers(new TomcatConnectorCustomizer() {
      
                  @Override
      
                  public void customize(Connector connector) {
      
                      Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
      
                      //定制化keepalivetimeout,设置30秒内没有请求则服务端自动断开keepalive链接
      
                      protocol.setKeepAliveTimeout(30000);
      
                      //当客户端发送超过10000个请求则自动断开keepalive链接
      
                      protocol.setMaxKeepAliveRequests(10000);
      
                  }
      
              });
      
          }
      
      }
    • Remarques :

    • Problème de capacité QPS de la base de données MySQL :
    • Requête de clé primaire : des dizaines de millions de données == 1-10 ms

    • Requête d'index unique : des dizaines de millions de données = = 10-100 ms

    Requête d'index non unique : des dizaines de millions de données == 100-1000 ms

    Aucune donnée d'index : Données au niveau d'un million == 1000 ms +
    • Problème de capacité TPS de la base de données MySQL :
    Opération de mise à jour et de suppression sans insertion : même requête

    Opération d'insertion : 1w~10w tps (dépend de l'optimisation de la configuration)

    Plusieurs façons d'augmenter la concurrence de Tomcat

    1. Tomcat est combiné pour utiliser Apache pour les pages statiques et Tomcat pour les pages dynamiques. Dans le même temps, le temps de connexion est réduit pour faire face à la situation où la concurrence est trop importante et il est trop tard pour le recyclage des threads.

    2. Pour le problème de pression excessive, un équilibrage de charge peut être effectué de toute façon. Un TOMCAT ne peut pas gérer autant de charges de threads, et si la JVM est trop volumineuse, son coût de gestion de la mémoire augmentera considérablement. Une approche plus raisonnable et scientifique consiste à utiliser 2 Go de mémoire et à configurer 3 à 4 instances TOMCAT, chacune avec une mémoire de 512 Mo.

    3. Pool de connexion à la base de données. De nombreuses personnes recommandent d'utiliser C3P0, ce qui peut améliorer plusieurs fois les performances simultanées de l'accès à la base de données.

    4. L'utilisation du cluster Tomcat peut maximiser les performances du serveur. Vous pouvez déployer plusieurs Tomcats sur des serveurs avec des configurations supérieures, ou vous pouvez déployer Tomcat sur plusieurs serveurs séparément. La méthode d'intégration d'Apache et de Tomcat est toujours la méthode JK. Il a été vérifié qu'en termes de réponse du système à un grand nombre d'utilisateurs, le cluster Apache+3Tomccat > le cluster Apache+2Tomcat > Et lorsque vous utilisez la méthode de déploiement Apache + plusieurs clusters Tomcat, si un Tomcat tombe en panne, le système peut continuer à être utilisé. Par conséquent, lorsque les performances du système matériel sont suffisamment supérieures, vous devez maximiser les performances du logiciel. et vous pouvez utiliser la méthode d'ajout de clusters Tomcat.

    1. Configurez MPM (modules multi-traitements). ThreadPerChild, ce paramètre est utilisé pour définir le nombre de threads pour chaque processus. Dans l'environnement Windows, la valeur par défaut est 64 et la valeur maximale est 1920. Il est recommandé de la définir entre 100 et 500 si les performances du serveur sont élevées. , la valeur sera plus grande, sinon elle sera plus petite. Le nombre maximum de requêtes que chaque processus enfant peut gérer est déterminé par le paramètre MaxRequestPerChild. La valeur de ce paramètre dépend davantage de la mémoire du serveur. Si la mémoire est relativement grande, elle peut être définie sur un paramètre élevé. Sinon, définissez une valeur plus petite. La valeur recommandée est 3000.

    2. et résolution de nom HostnameLookups off

    3. Activez le module UseCanonicalName UseCanonicalName on

    4 Désactivez les modules redondants qui n'ont pas besoin d'être chargés sont mod_include.so, mod_autoindex.so, mod_access.so, mod_auth.so.🎜🎜5. Activez le support KeepAlive 🎜🎜KeepAlive activé, KeepAliveTimeout 15 MaxKeepAliveRequests 1000🎜🎜Selon l'expérience réelle, l'effet de l'amélioration des performances du système via les clusters Apache et Tomcat est très évident. ressources matérielles et partager le traitement via plusieurs Tomcats La pression lors de l'utilisation de Tomcat seul. 🎜

    Le nombre maximum de connexions autorisées par le serveur Web dépend également des paramètres du noyau du système d'exploitation. Il est généralement d'environ 2 000 pour Windows et d'environ 1 000 pour Linux.

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer